3

(スライスを介して) Numpy マスク配列のビューを作成すると、マスクがビューにコピーされるため、ビューを更新しても元のマスクは変更されません (ただし、元の配列のデータは変更されます)。

私が望むのは、ビューを更新するときに元のデータ元のマスクの両方を変更することです。

Numpy のドキュメントから:

スライスにアクセスする場合、出力はデータ属性が元のデータのビューであり、マスクが nomask (元の配列に無効なエントリがなかった場合) または元の対応するスライスのコピーのいずれかであるマスクされた配列です。マスク。マスクの変更が元のマスクに反映されないようにするために、コピーが必要です。

import numpy.ma as ma

orig_arr = ma.array([[11,12],[21,22]])
orig_arr[1,:] = ma.masked

print orig_arr
## Prints: [[11 12]
##          [-- --]]

view_arr = orig_arr[1,:]
print view_arr
## Prints: [-- --]

view_arr[:] = [31,32]
print view_arr
## Prints: [31 32]

print orig_arr
## Prints: [[11 12]
##          [-- --]]
print orig_arr.data[1,:]
## Prints: [31 32]

ご覧のとおり、元の配列のデータは更新されていますが、マスクは更新されていません。

ビューを更新して元の配列のマスクに影響を与えるにはどうすればよいですか?

4

1 に答える 1

3

値を変更する前に、ビューでマスクをオフにしてみてください

orig_arr = ma.array([[11,12],[21,22]])
orig_arr[1,:] = ma.masked

print orig_arr
## Prints: [[11 12]
##          [-- --]]

view_arr = orig_arr[1,:]
print view_arr
## Prints: [-- --]

view_arr.mask=False # or [True, False] 


view_arr[:] = [31,32] 
print view_arr
## Prints: [31 32] #or [-- 32]

print orig_arr
## Prints: [[11 12]
##          [31 32]] # or [-- 32]
于 2015-12-11T18:41:57.683 に答える