如何实现NumPy数组的extend功能?合并二维数组的方法咨询
更高效的NumPy数组垂直合并方法
嘿,你现在转列表再用extend的方法确实能实现需求,但其实NumPy本身就有专门的原生工具来做这种垂直堆叠,不用来回转换类型,效率高多了!
方法1:用np.vstack()(最直观)
vstack就是专门用来垂直堆叠数组的,完美对应你想要的"extend"效果,直接把两个列数相同的数组按行拼接:
import numpy as np a = np.array([[1,2,3],[4,5,6],[7,8,9]]) b = np.array([[0,0,0],[1,1,1]]) c = np.vstack((a, b))
运行后c就是你想要的结果:
array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [0, 0, 0], [1, 1, 1]])
方法2:用np.concatenate()(更通用)
concatenate是更底层的拼接函数,通过指定axis=0来实现垂直堆叠(和vstack效果完全一致),如果以后需要横向拼接数组,只需要把axis改成1就行:
c = np.concatenate((a, b), axis=0)
为什么比转列表的方法更好?
- 性能更高:不用把NumPy数组转成Python列表,避免了数据拷贝和类型转换的开销,尤其是当数组规模很大的时候,这个性能差异会非常明显;
- 保持数组特性:直接得到NumPy数组,后续可以继续使用NumPy的向量运算、广播等专属特性,不用再额外转回数组。
注意:这两个方法要求两个数组的列数(第二个维度的大小)必须一致,如果列数不同会直接报错——不过这种情况下,合并后的"不规则数组"本身就不符合NumPy多维数组的规范,转列表的方法虽然能凑出结果,但实际业务中还是建议先调整数组形状、保证维度匹配后再合并。
内容的提问来源于stack exchange,提问作者Leoli
相关产品推荐
相关产品推荐

