我目前正在将 MATLAB 脚本翻译成 Python。在 MATLAB 代码中有一个步骤,我需要根据具有相同维度的 bool 矩阵从矩阵(二维数组)中选择条目。当我尝试用 Python 编写等效代码时,我注意到结果数组中的元素与 MATLAB 中的顺序不同。更准确地说,MATLAB 似乎按列顺序选择元素,而 Python 按行顺序选择元素。有没有办法让 Python 按 MATLAB 顺序输出数组?
小例子:
MATLAB:
a = [1, 2, 3; 4, 5, 6; 7, 8, 9];
b = [false, false, true; false, false, false; true, false, false];
a(b) % outputs [7;3] or [a(3,1); a(1,3)]
python :
import numpy as np
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]))
b= np.array([[False, False, True], [False, False, False], [True, False, False]]))
a[b] # outputs array([3,7]) or array([a[0,2], a[2,0])
最佳答案
扩展 Mikhail Genkin 的答案,可以使用
a.T[b.T]
(a.T[b]
在这种特殊情况下给出了相同的结果,因为 b
是一个对称矩阵)。另一种选择是
a.flatten('F')[b.flatten('F')]
关于python - 制作类似于 MATLAB 的 Python 2D 掩码数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68734772/