私は複数のマスクされた配列num30を持っていますarr0, arr1, ..., arrn
。Pythonのリストで配列をフラット化
私はそれらをリストarrs = [arr0, ..., arrn]
に入れました。
これらの配列を平坦化して、それらにマスクを貼りたいと思います。 Pythonはコピーを作成するとき、それは単なるポインタであるとき、私は理解していない
for arr in arrs:
arr = np.ravel(arr)
arr[mask] = ma.masked
:私のような何かをしました。このfor
ループは、arr0, ..., arrn
を平坦化しません(ただし、ravelはビューではなくコピーを出力します)。マスクは変更されますが、変数arr
は平坦化されます。
私が理解しているように、arr
はリストarrs
の要素のビューですので、arr
の要素を変更すると、リスト内の対応する配列の要素が変更されます。しかし、arr
に新しい値を割り当てると、割り当てがこの配列のビューになっていても元の配列は変更されません。どうして ?私が持っているので、私はループ内でこれを行うにはしたいと思い
arr0 = masked_array(data=[[1,--],[--,4]], mask=[[False,True],[True,False]])
arr1 = masked_array(data=[[5,--],[--,8]], mask=[[False,True],[True,False]])
:平坦化する
配列:
arr0 = masked_array(data=[[1,2],[3,4]], mask=False)
arr1 = masked_array(data=[[5,6],[7,8]], mask=False)
mask = [[False,True],[True,False]]
の予想される出力の例と
編集たくさんの配列(15個以上)があり、コード内で配列名を使用したい。
arr0 = np.ravel(arr0)
...
arrn = np.ravel(arrn)
達成しようとしている数値例を追加できますか? –
問題はリストイテレータにあります。ループ内で割り当てることはできません。 – hpaulj
'arr = np.ravel(arr)'は 'arr'の新しい(平坦化された)ビューを作成し、* arr *という名前をその作成したビューを指すように再割り当てします。普通の割り当てだけで[名前を何かを指すように再割り当てする](http://stackoverflow.com/questions/2438938/python-copy-through-assignment)。あなたが 'ravel()'と書いたように、ビューを作成するので、 'arr [mask] = ma.masked'はオリジナルも変更します。 –