如何将两个NumPy数组列表按对应元素合并为目标矩阵
如何对应合并NumPy数组列表中的元素
嘿,我完全懂你要实现的效果!你之前用new_list = [list1, list2]的方式,只是把两个列表嵌套成了一个包含两个子列表的结构,并没有把对应位置的数组按列拼合,这就是结果不符合预期的原因。
下面给你两种实用的解决方案:
方法一:列表推导式 + np.hstack()(得到数组列表)
这种方式最直观,直接遍历两个列表的对应元素并完成拼接:
import numpy as np list1 = [np.array([14, 17, 17, 8]), np.array([ 7, 7, 19, 16]), np.array([ 9, 18, 2, 19])] list2 = [np.array([909]), np.array([909]), np.array([998])] # 遍历对应位置的数组对,按列拼接 new_list = [np.hstack((arr1, arr2)) for arr1, arr2 in zip(list1, list2)]
运行后打印结果:
for arr in new_list: print(arr)
输出:
[ 14 17 17 8 909] [ 7 7 19 16 909] [ 9 18 2 19 998]
方法二:整体转为二维数组后拼接(得到单个二维NumPy数组)
如果你最终想要的是一个完整的二维矩阵,而不是数组列表,可以先把两个列表转为二维数组,再整体拼接:
# 将列表转为二维数组 arr1 = np.vstack(list1) arr2 = np.vstack(list2) # 按列拼接成一个大矩阵 combined_arr = np.hstack((arr1, arr2)) print(combined_arr)
输出:
[[ 14 17 17 8 909] [ 7 7 19 16 909] [ 9 18 2 19 998]]
小提示
- 确保
list1和list2的长度一致,否则zip只会配对到较短列表的长度,超出的元素会被忽略。如果存在长度不一致的情况,可以用itertools.zip_longest来处理,但需要补充缺失的默认值(比如np.array([0]))。
内容的提问来源于stack exchange,提问作者nekovolta
相关产品推荐
相关产品推荐

