在循环中向NumPy数组追加元素以构造方阵的最简洁实现方法
解决方法:生成二维数组(无需预先定义维度)
嘿,我来帮你搞定这个问题!首先咱们先弄明白你之前代码出错的原因:你初始化的np.array([])是一个空的一维数组,它没有任何元素,自然没法用myArray[i]去索引赋值——numpy数组的大小是固定的,不像Python列表可以动态扩展,直接索引空数组肯定会报错。
接下来给你几个最简洁的实现方式,分场景来看:
场景1:直接生成全1的二维数组(最省事)
如果你的需求就是生成10行8列的全1数组(你提到的“方阵”可能是指二维数组?如果是严格的方阵(行数=列数),把第二个参数改成10就行),完全不需要循环,一行代码搞定:
import numpy as np # 生成10行8列的全1数组 myArray = np.ones((10, 8)) # 如果要严格方阵(比如10x10),改成: # myArray = np.ones((10, 10))
场景2:需要动态添加元素(比如每个行不是固定的全1)
如果你的每个行元素需要根据i做不同计算(不是固定的np.ones(8)),那可以先把每一行存入Python列表(列表支持动态扩展),最后再转成numpy数组,这样就不用预先定义维度:
import numpy as np my_list = [] for i in range(10): # 这里可以替换成你需要的任意行计算,比如根据i生成不同的数组 my_list.append(np.ones(8)) myArray = np.array(my_list)
这样得到的myArray就是10x8的二维数组,完全不需要提前知道维度信息。
场景3:预先分配空间再赋值(适合大数组优化)
如果你处理的是非常大的数组,担心列表占用内存,可以预先分配好数组空间,再循环赋值:
import numpy as np # 预先分配10行8列的空数组(元素值是随机的,后续会覆盖) myArray = np.empty((10, 8)) for i in range(10): myArray[i] = np.ones(8)
不过这种方式需要你提前知道行数和列数,不如前两种灵活。
总结一下:如果是固定的全1数组,用np.ones()最简洁;如果需要动态生成每行元素,用列表收集再转数组最灵活,也不需要预先定义维度。
内容的提问来源于stack exchange,提问作者cjm2671
相关产品推荐
相关产品推荐

