Python:如何将列表添加到NumPy数组并实现迭代新增列表
解决方案
NumPy数组为固定大小结构,频繁追加操作性能较差,迭代添加场景优先使用Python列表作为临时容器,所有添加操作完成后再转为NumPy数组。
基础实现(匹配当前输出需求)
首先修正代码中list作为变量名的问题,该名称为Python内置类型名,作为变量使用会覆盖原有功能:
import numpy as np # 修正变量命名 my_list = [1, 2, 3] origin_arr = np.array([3, 4, 5, 6]) # 先存入Python列表容器 container = [my_list, origin_arr.tolist()] # 转为NumPy数组,因两个子序列长度不同,指定dtype为object result = np.array(container, dtype=object) print(result)
输出结果符合预期:
[[1 2 3] [3 4 5 6]]
迭代添加场景实现
多次迭代添加时优先用Python列表缓存数据,避免频繁操作NumPy数组带来的内存开销:
import numpy as np # 初始化容器,存入初始数组 container = [] init_arr = np.array([3,4,5,6]) container.append(init_arr.tolist()) # 模拟迭代添加逻辑 for i in range(10): # 此处替换为每次迭代生成的新列表 new_list = [i, i+1, i+2] container.append(new_list) # 所有添加完成后统一转成NumPy数组 final_arr = np.array(container, dtype=object)
直接操作NumPy数组追加的方案(非高频场景可用)
如果确实需要直接对NumPy数组做追加,可使用np.append方法,注意维度匹配:
import numpy as np my_list = [1,2,3] origin_arr = np.array([3,4,5,6], dtype=object) # 先将原数组转为二维结构 origin_arr = origin_arr.reshape(1, -1) # 沿0轴追加新元素,新元素需要匹配维度 result = np.append(origin_arr, [my_list], axis=0) print(result)
额外注意事项
- 若后续要添加的所有子序列长度都一致,无需指定
dtype=object,直接转换即可得到数值型二维数组,运算效率更高 - 非必要不建议高频调用NumPy的追加类方法,同等数据量下,先操作Python列表的性能比直接操作NumPy数组高1~2个数量级
内容的提问来源于stack exchange,提问作者njan
相关产品推荐
相关产品推荐

