在MATLAB中有一个称为vec
的函数,它接受一个矩阵并将列堆叠成一个向量。例如,如果我们调用以下矩阵" X":
[1 2]
[3 4]
然后vec(X)
将返回向量:
[1]
[3]
[2]
[4]
似乎没有直接实现这一点,并且" NumPy for MATLAB users"没有直接的等价物。
所以,如果给出一个numpy数组(代表矩阵),那么NumPy非常优雅的一行是什么才能重现这个结果呢?只是好奇,看看这是多么简洁/优雅。谢谢!
答案 0 :(得分:4)
你可以使用" 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]])
答案 1 :(得分:3)
我认为你想要的是flatten()
EG:
>>> 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'
更改订单的替代方法
答案 2 :(得分:1)
对于一维结果,请使用X.T.ravel()
或X.T.flatten()
。对于二维列,请使用X.T.reshape(-1,1)
。