0

マスクされた符号なし整数配列 および に関する奇妙な事実に出くわしましたnp.ma.argmax

次の配列を検討してください。

>>> marr = np.ma.array(np.array([[2,2,2], [3,3,3], [1,1,1]]), mask=False, dtype=np.uint16)
>>> marr
masked_array(data =
 [[2 2 2]
 [3 3 3]
 [1 1 1]],
             mask =
 [[False False False]
 [False False False]
 [False False False]],
       fill_value = 999999)

結果を使用np.ma.argmaxすると、私が期待したものになります:

>>> print(np.ma.argmax(marr, axis=0))
[1 1 1]

最後の行をマスクすると、結果が間違っています:

>>> marr.mask[2] = True
>>> marr
masked_array(data =
 [[2 2 2]
 [3 3 3]
 [-- -- --]],
             mask =
 [[False False False]
 [False False False]
 [ True  True  True]],
       fill_value = 999999)
>>> print(np.ma.argmax(marr, axis=0))
[2 2 2]   # why?

マスクされた行が最大だと思いますか?を 0 に変更しfill_valueましたが、結果は同じままです。マスクされた行が最大であるとまだ考えています。これは符号なし整数配列にのみ影響するようです。

ただし、正しい結果np.ma.MaskedArray.argmaxを返します。np.argmax

>>> print(marr.argmax(axis=0))
[1 1 1]
>>> print(np.argmax(marr, axis=0))
[1 1 1]

np.ma.argmaxここで正しいことをしていないのはなぜですか?私が見る限り、それはメソッド自体として定義されています。

4

2 に答える 2