我偶然发现了一个关于屏蔽无符号整数数组和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?
它现在认为被屏蔽的行是最大值?我什至将其更改fill_value
为 0,但结果保持不变:它仍然认为被屏蔽的行是最大值。似乎这只影响无符号整数数组。
但是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
这里没有做正确的事情?据我所知,它被定义为方法本身。