在MATLAB中有一个称为vec
的函数,它取一个矩阵并将列堆叠成单个向量。例如,如果我们称下面的矩阵为"X":
[1 2]
[3 4]
则vec(X)
将返回向量:
[1]
[3]
[2]
[4]
似乎没有任何直接实现这一点,并且"MATLAB用户的NumPy"没有直接等效。
那么,如果给定一个numpy数组(表示矩阵),那么一个非常优雅的numpy行应该是什么来复制这个结果呢?只是想看看它能有多简洁/优雅。谢谢!
您可以使用"Fortran" order
选项,例如reshape
:
>>> import numpy as np
>>> a = np.array([[1, 2], [3, 4]])
>>> a.reshape((-1, 1), order="F")
array([[1],
[3],
[2],
[4]])
我认为你想要的是flatten()
,
>>> import numpy as np
>>> a = np.array([[1, 2], [3, 4]])
>>> a.flatten('F')
>>> array([1, 3, 2, 4])
谢谢@jonrsharpe,实际上我也刚刚查了一下!BTW:使用a.T.flatten()
转置数组是使用order='F'
对于一维结果,使用X.T.ravel()
或X.T.flatten()
。对于二维列,使用X.T.reshape(-1,1)
。