如何从空numpy数组通过添加一维numpy数组生成二维numpy数组?
解决Numpy添加数组后扁平化的问题
你遇到的问题是因为初始创建的np.array([])是一维空数组,直接使用np.append时,默认会将所有输入扁平化后拼接,所以得到的是一维结果。要得到二维数组,有两种常用方案:
方案一:初始化二维空数组并指定维度
先创建一个行数为0、列数与目标数组一致的二维空数组,之后添加行时指定axis=0,确保沿行方向拼接:
import numpy as np # 初始化二维空数组,列数设为8(和后续要添加的数组长度一致) a = np.empty((0, 8)) # 添加第一个一维数组,注意用[]包裹成二维形式 row1 = np.array([1, 2, 3, 4, 5, 6, 7, 8]) a = np.append(a, [row1], axis=0) # 添加第二个一维数组 row2 = np.array([9, 10, 11, 12, 13, 14, 15, 16]) a = np.append(a, [row2], axis=0) print(a)
输出结果:
[[ 1. 2. 3. 4. 5. 6. 7. 8.] [ 9. 10. 11. 12. 13. 14. 15. 16.]]
方案二:先收集数组到Python列表,再转Numpy数组
这种方法效率更高(避免Numpy频繁扩容),先把所有一维数组存入普通Python列表,最后一次性转成二维Numpy数组:
import numpy as np # 用Python列表暂存所有行 row_list = [] row_list.append([1, 2, 3, 4, 5, 6, 7, 8]) row_list.append([9, 10, 11, 12, 13, 14, 15, 16]) # 转成二维Numpy数组 a = np.array(row_list) print(a)
输出结果:
[[ 1 2 3 4 5 6 7 8] [ 9 10 11 12 13 14 15 16]]
为什么原方法不行?
np.array([])创建的是一维数组,当你调用np.append(a, row1)时,未指定axis参数,Numpy会自动将两个输入数组都扁平化后拼接,最终得到一维数组。如果强行指定axis=0,会因为维度不匹配报错,所以必须从一开始就初始化二维结构。
内容的提问来源于stack exchange,提问作者miitchel
相关产品推荐
相关产品推荐

