[英]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.