我想使用循环中的行来构建一个numpy矩阵。但是如何初始化矩阵呢?如果我写
A = []
A = numpy.vstack((A, [1, 2]))
我得到了
ValueError:除了连接轴之外的所有输入数组维度必须完全匹配
最佳做法是什么?
注意:我事先不知道行数。列数已知。
答案 0 :(得分:3)
行数未知
一种方法是形成列表列表,然后在一次操作中转换为numpy
数组:
final = []
# x is some generator
for item in x:
final.append(x)
A = np.array(x)
或者,更优雅的是,给定一个生成器x
:
A = np.array(list(x))
此解决方案具有时间效率,但内存效率低。
已知行数
numpy
阵列上的附加操作非常昂贵,不推荐使用。如果事先知道最终数组的大小,可以实例化所需大小的空(或零)数组,然后用值填充它。例如:
A = np.zeros((10, 2))
A[0] = [1, 2]
或者在一个循环中,用一个简单的赋值来演示语法:
A = np.zeros((2, 2))
# in reality, x will be some generator whose length you know in advance
x = [[1, 2], [3, 4]]
for idx, item in enumerate(x):
A[idx] = item
print(A)
array([[ 1., 2.],
[ 3., 4.]])