如何将Numpy数组(mxn)维度展开为单个向量

时间:2013-04-13 14:24:41

标签: python matlab numpy

我只是想知道是否有一个捷径可以将numpy数组展开到一个向量中。例如(将以下Matlab代码转换为python):

Matlab方式:     A = 0(10,10)%
    A_unroll = A(:)%< - 如何在python中执行此操作

提前感谢。

2 个答案:

答案 0 :(得分:8)

这是你的想法吗?

编辑:帕特里克指出,人们必须小心将A(:)转换为Python。

当然,如果你只是想弄平矩阵或二维零数组,那就无所谓了。

所以这是一种获取matlab行为的方法。

>>> a = np.array([[1,2,3], [4,5,6]])
>>> a
array([[1, 2, 3],
       [4, 5, 6]])
>>> # one way to get Matlab behaivor
... (a.T).ravel()
array([1, 4, 2, 5, 3, 6])

numpy.ravel会使2D数组变平,但不会像matlab (:)那样完成。

>>> import numpy as np
>>> a = np.array([[1,2,3], [4,5,6]])
>>> a
array([[1, 2, 3],
       [4, 5, 6]])
>>> a.ravel()
array([1, 2, 3, 4, 5, 6])

答案 1 :(得分:6)

你必须要小心,因为ravel并没有解释Matlab与A(:)相同的元素。如果您使用:

>>> a = np.array([[1,2,3], [4,5,6]])
>>> a.shape
(2,3)
>>> a.ravel()
array([1, 2, 3, 4, 5, 6])

在Matlab中:

>> A = [1:3;4:6];
>> size(A)
ans =

     2     3
>> A(:)

ans =

     1
     4
     2
     5
     3
     6

在Matlab中,元素首先在列中展开,然后在行中展开。在Python中,它恰恰相反。这与元素存储的顺序有关(默认情况下,C顺序为NumPy与Matlab中的Fortran顺序)。

知道A(:)等同于重塑(A,[numel(A),1]),你可以在Python中获得相同的行为:

>>> a.reshape(a.size,order='F')
array([1, 4, 2, 5, 3, 6])

注意顺序=' F'它指的是Fortran订单(列首先解开)。