python - 如何使用 2D 蒙版过滤 3D 阵列

标签 python arrays numpy masking

我有一个 (m,n,3) 数组 data,我想用 (m,n) 过滤它的值用于接收 (x,3) output 数组的掩码。

下面的代码可以工作,但我怎样才能用更有效的替代方法替换 for 循环?

import numpy as np

data = np.array([
    [[11, 12, 13], [14, 15, 16], [17, 18, 19]],
    [[21, 22, 13], [24, 25, 26], [27, 28, 29]],
    [[31, 32, 33], [34, 35, 36], [37, 38, 39]],
])
mask = np.array([
    [False, False, True],
    [False, True, False],
    [True, True, False],
])

output = []
for i in range(len(mask)):
    for j in range(len(mask[i])):
        if mask[i][j] == True:
            output.append(data[i][j])
output = np.array(output)

预期的输出是

np.array([[17, 18, 19], [24, 25, 26], [31, 32, 33], [34, 35, 36]])

最佳答案

import numpy as np

data = np.array([
    [[11, 12, 13], [14, 15, 16], [17, 18, 19]],
    [[21, 22, 13], [24, 25, 26], [27, 28, 29]],
    [[31, 32, 33], [34, 35, 36], [37, 38, 39]],
])
mask = np.array([
    [False, False, True],
    [False, True, False],
    [True, True, False],
])

output = data[mask]

关于python - 如何使用 2D 蒙版过滤 3D 阵列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74878253/

相关文章:

python - Python中的多维矩阵乘法

python - 将值设置为字典的字典值

arrays - 使用 bash 在 Linux 中创建一个数组

php - array_merge_recursive 声明数组不是数组

ruby - 如何在 Ruby 中对数字数组求和?

python - NumPy 相当于合并

python - 为什么得到意想不到的字典

python - 在使用 DHTML、AJAX 等的网站上使用 Python Mechanize ?

Python pip install 报错

python - 创建列的内存高效方法,该列指示来自一组列的值的唯一组合