1. ホーム
  2. python

[解決済み] 条件を満たした場合にNumpyの要素を置き換える

2022-05-15 16:28:40

質問

私は大きな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の関数はないのでしょうか?

どのように解決するのですか?

>>> 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)