我只是想知道是否有一个捷径可以将numpy数组展开到一个向量中。例如(将以下Matlab代码转换为python):
Matlab方式:
A = 0(10,10)%
A_unroll = A(:)%< - 如何在python中执行此操作
提前感谢。
答案 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订单(列首先解开)。