関数内のマスクされた配列の一部を変更する必要があります。
import numpy.ma as ma
arr_2d = ma.masked_all((5,5))
arr_3d = ma.masked_all((5,5,5))
arr_3d[0,1] = 5
def func1(arr, val):
arr[:] = val
単純に見えますが、その後...
>>> func1(arr_3d[0], 1)
>>> arr_3d[0]
masked_array(data =
[[-- -- -- -- --]
[1.0 1.0 1.0 1.0 1.0]
[-- -- -- -- --]
[-- -- -- -- --]
[-- -- -- -- --]],
mask =
[[ True True True True True]
[False False False False False]
[ True True True True True]
[ True True True True True]
[ True True True True True]],
fill_value = 1e+20)
マスクがコピーとして関数に渡されるように、常に配列のスライスに設定されている共有マスクと関係があるようです
マスクを明示的に渡す、データのコピーを返す、またはインデックス付きのより大きな配列を渡す以外に、修正または回避する方法があることを願っています。