【问题标题】:How to apply 1D mask on 2D array in Python numpy? [duplicate]如何在 Python numpy 中的 2D 数组上应用 1D 掩码? [复制]
【发布时间】:2013-04-26 14:03:45
【问题描述】:

有一个一维数组:

arr0 = numpy.array([8,0,9,5])

还有一个二维数组,其形状为(len(arr0),3)

arr1 = numpy.array([9,5,6],
                   [2,7,4],
                   [6,7,8],
                   [1,8,3])

我想创建一个 arr1 的屏蔽数组,如果 arr0[i] == 0arr1[i] 被屏蔽:

Result arr2 = [[9,5,6],
               [-,-,-],
               [6,7,8],
               [1,8,3]]

创建这个新的掩码数组的优雅方法是什么?

我知道我可以使用形状为 (len(arr0),3) 的蒙版创建它。我希望我可以使用形状为 (len(arr0)) 的蒙版来创建它。

【问题讨论】:

  • 为什么只制作像(arr0 * np.ones((arr1.shape[1], 1))).T这样的面具会有问题
  • @askewchan 这与那个问题不同。它没有一维数组,其值用于从二维数组中提取掩码数组。

标签: python numpy mask


【解决方案1】:

如果您执行以下操作,您的掩码可以由 bool 数组 arr0 == 0 设置:

In [1]: arr1 = numpy.ma.masked_array(arr1)
In [2]: arr1[arr0 == 0] = numpy.ma.masked
In [3]: print arr1
[[9 5 6]
[-- -- --]
[6 7 8]
[1 8 3]]

(顺便说一句,您需要在 arr1 定义周围添加一组额外的括号。)

【讨论】:

    猜你喜欢
    • 2021-04-17
    • 1970-01-01
    • 2017-01-26
    • 2021-10-12
    • 2013-08-28
    • 1970-01-01
    • 2017-06-18
    • 2017-11-08
    • 1970-01-01
    相关资源
    最近更新 更多