Python 使用numpy在循环中创建矩阵

Python 使用numpy在循环中创建矩阵,python,numpy,matrix,iteration,Python,Numpy,Matrix,Iteration,我想用我在循环中得到的行建立一个numpy矩阵。但是如何初始化矩阵呢?如果我写 A = [] A = numpy.vstack((A, [1, 2])) 我明白了 ValueError:除连接轴之外的所有输入数组维度必须完全匹配 这方面的最佳做法是什么 注意:我事先不知道行数。列数已知。行数未知 一种方法是形成列表列表,然后通过一次操作将其转换为numpy数组: final = [] # x is some generator for item in x: final.append(

我想用我在循环中得到的行建立一个numpy矩阵。但是如何初始化矩阵呢?如果我写

A = []
A = numpy.vstack((A, [1, 2]))
我明白了

ValueError:除连接轴之外的所有输入数组维度必须完全匹配

这方面的最佳做法是什么


注意:我事先不知道行数。列数已知。

行数未知

一种方法是形成列表列表,然后通过一次操作将其转换为
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.]])

不要编辑问题以使现有答案无效。如果你还有其他问题,请问一个新问题。你已经努力回答这个问题了。OP不允许编辑原始问题以使此答案无效。如果已编辑,请升起mod标志。