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

Fel*_*peG 6 python matlab numpy

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

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

预先感谢.

Aka*_*all 9

这是你的想法吗?

编辑:帕特里克指出,人们必须小心将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])
Run Code Online (Sandbox Code Playgroud)

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])
Run Code Online (Sandbox Code Playgroud)


Pat*_*ult 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])
Run Code Online (Sandbox Code Playgroud)

在Matlab中:

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

     2     3
>> A(:)

ans =

     1
     4
     2
     5
     3
     6
Run Code Online (Sandbox Code Playgroud)

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

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

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

注意order ='F'表示Fortran顺序(列首先解开).