定义一个事先不知道一个维度的矩阵

时间:2018-04-15 18:08:38

标签: python numpy scipy

在一个程序中,我需要创建一个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

1 个答案:

答案 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.arraynp.stack或其他轴。

这种基本思想是附加到列表,并在迭代后使用一次调用来建立数组。

matrix[i,:] = Y仅在matrix足够大才能开始时有效。它没有“增长”矩阵(与MATLAB和Javascript实践相反)。您可以迭代地将一个数组连接到另一个数组,但效率较低。