最优雅的MATLAB实现" vec" NumPy中的功能

时间:2014-08-11 16:44:48

标签: python matlab numpy vectorization

在MATLAB中有一个称为vec的函数,它接受一个矩阵并将列堆叠成一个向量。例如,如果我们调用以下矩阵" X":

[1 2]
[3 4]

然后vec(X)将返回向量:

[1]
[3]
[2]
[4]

似乎没有直接实现这一点,并且" NumPy for MATLAB users"没有直接的等价物。

所以,如果给出一个numpy数组(代表矩阵),那么NumPy非常优雅的一行是什么才能重现这个结果呢?只是好奇,看看这是多么简洁/优雅。谢谢!

3 个答案:

答案 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)