在numpy的循环中创建矩阵

时间:2018-05-25 09:02:35

标签: python numpy matrix iteration

我想使用循环中的行来构建一个numpy矩阵。但是如何初始化矩阵呢?如果我写

A = []
A = numpy.vstack((A, [1, 2]))

我得到了

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

最佳做法是什么?

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

1 个答案:

答案 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.]])