我对 Python 和 numpy 还很陌生,如果没有手动迭代,我就无法让它工作。
我有一个带有浮点值的 n 维数据数组和一个形状相同的 bool “掩码”数组。由此,我需要获取一个与其他两个数组形状相同的新数组,其中包含数据数组中的所有值,其中同一位置的掩码数组为 True。其他一切都应该是0。
:
# given
data = np.array([[1., 2.], [3., 4.]])
mask = np.array([[True, False], [False, True]])
# target
[[1., 0.], [0., 4.]]
看起来numpy.where()
可能会提供这个,但我无法让它工作。
奖励:不要创建新数组,而是在掩码为 False
的位置替换数据值,以防止新的内存分配。
谢谢!
最佳答案
这应该有效
data[~mask] = 0
Numpy bool 数组可以用作索引 ( https://docs.scipy.org/doc/numpy-1.15.0/user/basics.indexing.html#boolean-or-mask-index-arrays )。该操作将仅应用于值为“True”的像素。在这里,您首先需要反转您的掩码,使 False 变为 True。您需要反转,因为您想要对具有 False 值的像素进行操作。
关于python - numpy - 多维 bool 掩码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53814869/