【问题标题】:numpy - Multidimensional boolean masknumpy - 多维布尔掩码
【发布时间】:2020-07-23 19:54:34
【问题描述】:

我对 Python 和 numpy 还很陌生,如果没有手动迭代,我就无法让它工作。

我有一个带有浮点值的 n 维数据数组和一个形状相同的布尔“掩码”数组。从那我需要得到一个与其他两个形状相同的新数组,其中所有值都来自数据数组,其中同一位置的掩码数组是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 的位置替换数据值以防止新的内存分配。

谢谢!

【问题讨论】:

    标签: python numpy


    【解决方案1】:

    这应该可以工作

    data[~mask] = 0
    

    Numpy 布尔数组可以用作索引 (https://docs.scipy.org/doc/numpy-1.15.0/user/basics.indexing.html#boolean-or-mask-index-arrays)。该操作将仅应用于值为“True”的像素。在这里,您首先需要反转您的掩码,以便 False 变为 True。您需要反转,因为您想对具有 False 值的像素进行操作。

    【讨论】:

      【解决方案2】:

      此外,您可以将它们相乘。因为在数学运算中输入布尔数组时,“真”和“假”分别被视为“1”和“0”。所以,

      #element-wise multiplication
      data*mask
      

      np.multiply(data, mask)
      

      【讨论】:

        猜你喜欢
        • 2021-09-10
        • 1970-01-01
        • 2011-11-03
        • 2021-08-14
        • 2021-09-12
        • 1970-01-01
        • 2019-11-04
        • 1970-01-01
        • 2020-04-23
        相关资源
        最近更新 更多