我只想知道是否有将 numpy 数组展开为单个向量的捷径。例如(将以下 Matlab 代码转换为 python):
Matlab方式:A = zeros(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])
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])
您必须在这里小心,因为 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 顺序(列首先解开)。