MATLAB's "vec"最优雅的实现NumPy中的函数



在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)

最新更新