2016-10-18 7 views
0

の要素の値を変更し、私は一度取得、アクセス及びnumpyのアレイ

import numpy as np 
nx=3 
ny=3 
label = np.ones((nx, ny)) 
mask=np.zeros((nx,ny),dtype=np.bool) 
label[mask]=0 

生成mask次のコードセグメントを見た私はいくつかの要素を割り当てたい場合はブール値のアレイ

[[False False False] 
[False False False] 
[False False False]] 

あります例えば、私はmask[2,1]="True"を使用しようとしていましたが、期待通りに対応するエントリを変更しなければ動作しませんでした。アクセスを取得し、数値の配列の値を変更する正しい方法は何ですか。さらに、label[mask]=0は何をしていますか?対応するラベルエントリー値を割り当てるために、各マスクエントリー値を使用しようとしているようです。

+1

はたぶん(https://docs.scipy.org/doc/numpy-1.10.1/user/basics.indexing.html#boolean-or-mask- [ 'ブール - indexing']をよく読んでインデックス配列)? – Divakar

+0

'label [mask] = 0'はあなたの' mask'配列がすべて 'false'なので何もしません。 'mask'のいくつかの要素が' true'だった場合、これはうまくいくでしょう。アクセスし、 'np.array'に値を代入することは、私が心配する限り、acessing pythonリストと論理的に同じです。配列を持つ配列にアクセスするオプションもあります。 –

答えて

0

ここには、これを理解するのに役立つコメントが記載されたコードスニペットがあります。 @Divakarが提供したリンクを調べて、boolean-indexingを調べることをお勧めします。

# a two dimensional array with random values 
arr = np.random.random((5, 5)) 

# assign mask to a two dimensional array (same shape as arr) 
# that has True for every element where the corresponding 
# element in arr is greater than 0.5 
mask = arr > 0.5 

# assign all the elements in arr that are greater than 0.5 to 0 
arr[mask] = 0 

# the above can be more concisely written as: 
arr[arr>0.5] = 0 

# you can change the mask any way you want 

# here I invert the mask 
inv_mask = np.invert(mask) 

# assign all the values in arr less than 0.5 to 1 
arr[inv_mask] = 1