8

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

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

预先感谢。

4

2 回答 2

12

这是你的想法吗?

编辑:正如帕特里克指出的那样,将 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确实会展平二维数组,但不会像 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])
于 2013-04-13T14:28:16.540 回答
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 顺序(列首先解开)。

于 2013-04-13T22:43:53.440 回答