如何在numpy中向二维数组添加数据 实现按行存入新元素
问题根因
你得到一维数组的原因有两点:
- 初始创建的
np.array([])是一维空数组,本身没有行/列的二维结构 - 调用
np.append时没有指定axis参数,numpy会默认将两个输入数组全部展平后再拼接,自然无法得到二维结构。
另外你原代码里的ptint("-----")存在拼写错误,修改为print即可正常输出分隔线。
解决方案
方案1:指定维度逐步追加(适合少量数据追加场景)
初始化时直接定义二维空数组,追加时指定按行拼接即可:
import numpy as np # 初始化形状为(0,3)的二维空数组,代表0行、3列,后续每次追加1行3个元素 np_xyz = np.empty((0, 3), dtype=int) x = 1 y = 2 z = 3 xyz = [x,y,z] # 追加时指定axis=0按行拼接,注意要把待添加的列表包裹一层转为二维结构 np_xyz = np.append(np_xyz, [xyz], axis=0) print(np_xyz) print("-----") x = 4 y = 5 z = 6 xyz = [x,y,z] np_xyz = np.append(np_xyz, [xyz], axis=0) print(np_xyz)
运行输出:
[[1 2 3]] ----- [[1 2 3] [4 5 6]]
方案2:先收集数据再转数组(推荐,性能更优)
numpy数组是定长结构,反复调用np.append会频繁重新分配内存,数据量大时建议先把所有行存入普通列表,最后一次性转为numpy数组:
import numpy as np rows = [] x = 1 y = 2 z = 3 rows.append([x,y,z]) print(np.array(rows)) print("-----") x = 4 y = 5 z = 6 rows.append([x,y,z]) print(np.array(rows))
输出和方案1完全一致。
内容的提问来源于stack exchange,提问作者Charles-Antoine Samson
相关产品推荐
相关产品推荐

