在一个程序中,我需要创建一个matrix
,它可以是形状的,例如matrix.shape(x,100)
。事先不知道形状的第一维,所以我在这里只使用X
。在迭代中,程序将生成一维数组,例如' Y.shape =(100,1)`。所以程序就像这个
matrix = []
index = 0
for i in range(XY):
if something
matrix[index,:] = Y
index = index+1
我不确定是否可以通过这种方式初始化matrix
,当我在上面显示的某些迭代中分配Y
时,是否需要重新整形matrix{index,:]=Y
。
答案 0 :(得分:0)
您无法制作具有未知维度的numpy
数组。但是尽管有这个名字,你的matrix
不是一个数组,它是一个python列表:
In [1]: alist = []
In [2]: for i in range(3):
...: alist.append(np.arange(4)[:,None])
...:
In [3]: alist
Out[3]:
[array([[0],
[1],
[2],
[3]]), array([[0],
[1],
[2],
[3]]), array([[0],
[1],
[2],
[3]])]
In [4]: np.concatenate(alist, axis=1)
Out[4]:
array([[0, 0, 0],
[1, 1, 1],
[2, 2, 2],
[3, 3, 3]])
您可以有效地将对象附加到列表中。填充后,该列表可以转换为数组。这里,因为元素是(n,1),所以我选择连接成一个(4,3)数组。但可以使用np.array
,np.stack
或其他轴。
这种基本思想是附加到列表,并在迭代后使用一次调用来建立数组。
matrix[i,:] = Y
仅在matrix
足够大才能开始时有效。它没有“增长”矩阵(与MATLAB和Javascript实践相反)。您可以迭代地将一个数组连接到另一个数组,但效率较低。