Fel*_*peG 6 python matlab numpy
我只是想知道是否有一个捷径可以将numpy数组展开到一个向量中.例如(将以下Matlab代码转换为python):
matlab方式:A = 0(10,10)%
A_unroll = A(:)%< - 如何在python中执行此操作
预先感谢.
这是你的想法吗?
编辑:帕特里克指出,人们必须小心将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)
你必须要小心,因为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顺序(列首先解开).