如何将一个(mxn)维的Numpy数组展开成一个sing

2024-03-29 07:21:39 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

提前谢谢。


Tags: 代码ltnumpy方式数组向量捷径matlab
2条回答

你就是这么想的吗?

编辑:正如Patrick指出的,必须小心将(:)转换为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 = 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(:)等同于reforme(A,[numel(A),1]),您可以在Python中使用以下命令获得相同的行为:

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

注意order=F,它表示Fortran顺序(列先展开)。

相关问题 更多 >