0

関数内のマスクされた配列の一部を変更する必要があります。

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)

マスクがコピーとして関数に渡されるように、常に配列のスライスに設定されている共有マスクと関係があるようです

マスクを明示的に渡す、データのコピーを返す、またはインデックス付きのより大きな配列を渡す以外に、修正または回避する方法があることを願っています。

4

1 に答える 1