マスクされた符号なし整数配列 および に関する奇妙な事実に出くわしました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
ここで正しいことをしていないのはなぜですか?私が見る限り、それはメソッド自体として定義されています。