如果满足条件则替换 Numpy 元素

新手上路,请多包涵

我有一个大的 numpy 数组,我需要对其进行操作,以便在满足条件时将每个元素更改为 1 或 0(稍后将用作像素掩码)。数组中大约有 800 万个元素,我当前的方法对于缩减管道来说花费的时间太长:

 for (y,x), value in numpy.ndenumerate(mask_data):

    if mask_data[y,x]<3: #Good Pixel
        mask_data[y,x]=1
    elif mask_data[y,x]>3: #Bad Pixel
        mask_data[y,x]=0

有没有可以加快速度的 numpy 函数?

原文由 ChrisFro 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 360
2 个回答
>>> import numpy as np
>>> a = np.random.randint(0, 5, size=(5, 4))
>>> a
array([[4, 2, 1, 1],
       [3, 0, 1, 2],
       [2, 0, 1, 1],
       [4, 0, 2, 3],
       [0, 0, 0, 2]])
>>> b = a < 3
>>> b
array([[False,  True,  True,  True],
       [False,  True,  True,  True],
       [ True,  True,  True,  True],
       [False,  True,  True, False],
       [ True,  True,  True,  True]], dtype=bool)
>>>
>>> c = b.astype(int)
>>> c
array([[0, 1, 1, 1],
       [0, 1, 1, 1],
       [1, 1, 1, 1],
       [0, 1, 1, 0],
       [1, 1, 1, 1]])

您可以通过以下方式缩短它:

 >>> c = (a < 3).astype(int)

原文由 Steve Barnes 发布,翻译遵循 CC BY-SA 3.0 许可协议

>>> a = np.random.randint(0, 5, size=(5, 4))
>>> a
array([[0, 3, 3, 2],
       [4, 1, 1, 2],
       [3, 4, 2, 4],
       [2, 4, 3, 0],
       [1, 2, 3, 4]])
>>>
>>> a[a > 3] = -101
>>> a
array([[   0,    3,    3,    2],
       [-101,    1,    1,    2],
       [   3, -101,    2, -101],
       [   2, -101,    3,    0],
       [   1,    2,    3, -101]])
>>>

参见,例如, 使用布尔数组进行索引

原文由 ev-br 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题