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

发布于 2021-01-29 14:55:32

我有一个需要处理的大型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函数可以加快速度?

关注者
0
被浏览
117
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。
    >>> 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)
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看