Python 定义一个事先不知道一维的矩阵
在一个程序中,我需要创建一个Python 定义一个事先不知道一维的矩阵,python,numpy,scipy,Python,Numpy,Scipy,在一个程序中,我需要创建一个矩阵,它可以是形状,例如矩阵.shape(x,100)。形状的第一个维度事先无法知道,所以我在这里只使用X。在迭代中,程序将生成一维数组,如“Y.shape=(100,1)`。所以程序是这样工作的 matrix = [] index = 0 for i in range(XY): if something matrix[index,:] = Y index = index+1 我不确定是否可以用这种方式初始化矩阵,并且在分
矩阵
,它可以是形状,例如矩阵.shape(x,100)
。形状的第一个维度事先无法知道,所以我在这里只使用X
。在迭代中,程序将生成一维数组,如“Y.shape=(100,1)`。所以程序是这样工作的
matrix = []
index = 0
for i in range(XY):
if something
matrix[index,:] = Y
index = index+1
我不确定是否可以用这种方式初始化
矩阵
,并且在分配矩阵时是否需要重塑Y
{index,:]=Y
在上面所示的某些迭代中。您不能创建维度未知的numpy
数组。但是,尽管有名称,您的矩阵
不是数组,而是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实践相反)。您可以迭代地将一个数组连接到另一个数组,但效率较低。什么是XY
?您可以用一个小数组提供一些工作代码吗?在哪里使用i
?