python - 制作类似于 MATLAB 的 Python 2D 掩码数组

标签 python arrays numpy matlab

我目前正在将 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/

相关文章:

python - 如何在 Visual Studio 代码中使用特定端口和本地主机调试 Django Web 应用程序?

php - 为什么会有json_decode($array, TRUE)?

php - array_map 和 trim 不从值中修剪空白

python - XCode 3.2 Ruby 和 Python 模板

python - perl 在文本文件中就地排序行

python - 将简单函数转换为多线程函数

python - 沿每个轴查找非零元素的最大索引

php file_get_contents(逗号分隔值)到数组

python - 需要 NumPy ndarray 数据的缓冲区类

numpy - 令人困惑的行为 numpy.linalg.eig (一个可能严重的问题)