繁体   English   中英

如何将(mxn)尺寸的Numpy数组展开为单个向量

[英]How do you unroll a Numpy array of (mxn) dimentions into a single vector

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

Matlab方式:A =零(10,10)%
A_unroll = A(:)%<-如何在python中做到这一点

预先感谢。

这是您的想法吗?

编辑:正如Patrick指出的那样,必须将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])

您在这里必须小心,因为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中则相反。 这与元素存储的顺序有关(NumPy中默认为C顺序,而Matlab中为Fortran顺序)。

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

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

注意order ='F',它指的是Fortran顺序(列首先是散列的)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM