代码之家  ›  专栏  ›  技术社区  ›  nneonneo

修改由两个连续布尔数组选择的子数组

  •  0
  • nneonneo  · 技术社区  · 7 年前

    我想修改一个由两个连续布尔数组选择的数组的子集。在我的用例中,我有一个图像 im ,而我正从一个感兴趣的区域 roi 使用某种条件。对于roi中的像素,我正在进行一些计算,并导出一个子区域 target . 我现在想对 目标 在原始图像中。在代码中:

    x, y = np.meshgrid(np.arange(800), np.arange(600))
    im = (x + y) / 6 # a test image to work with
    # use some arbitrary conditions to illustrate this
    roi = (im > 64) & (im < 128)
    target = (im[roi] & 0xf) > 0x7
    

    现在我想做些

    im[roi][target] = 0
    

    但这次失败是因为 im[roi] 不直接引用原始数组的元素(与普通切片不同)。

    有什么干净的方法来做我想做的?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Paul Panzer    7 年前

    您可以获得如下组合掩码:

    roi[roi] = target
    im[roi] etc.
    

    这将覆盖 roi . 如果你需要保留它:

    roit = np.zeros_like(roi)
    roit[roi] = target
    im[roit] etc.
    

    或使用索引:

    import operator
    I, J = map(operator.itemgetter(target), np.where(roi))
    im[I, J] etc.