2016-06-29 13 views
2

私はサイズが10-by-10のバイナリ行列を持っています。私はこれを印刷するとき、私はこの与えられたインデックスで1をすべて置き換えます - numpy

[[-1 0 -1 1 0 -1 -1 1 -1 0] 
[ 1 0 1 -1 -1 1 -1 -1 -1 1] 
[ 0 -1 1 0 -1 -1 -1 1 -1 0] 
[-1 -1 -1 -1 -1 1 -1 1 -1 1] 
[ 1 1 1 1 0 0 0 0 0 1] 
[ 1 1 1 1 0 0 0 0 1 0] 
[ 1 0 1 0 0 1 1 0 1 0] 
[ 0 0 0 1 1 0 1 1 1 0] 
[ 0 1 0 0 1 1 1 0 1 0] 
[ 1 1 1 1 1 0 1 0 1 0]] 
のようなものを取得し、この

import numpy as np 
mat = np.random.randint(2, size=(10, 10)) 
index = [6,7,8,9] 

mat[(mat[index,:] == 1).nonzero()] = -1 
print(mat) 

のようなものを得ることができた-1

に指定されたインデックスの行列内のすべての1'sを変更したいです

インデックスがマトリックスの最後にあるので、これは間違っているようです。

[[ 1 0 1 1 0 1 1 1 1 0] 
[ 1 0 1 1 1 1 1 1 1 1] 
[ 0 1 1 0 1 1 1 1 1 0] 
[ 1 1 1 1 1 1 1 1 1 1] 
[ 1 1 1 1 0 0 0 0 0 1] 
[ 1 1 1 1 0 0 0 0 1 0] 
[-1 0 -1 0 0 -1 -1 0 -1 0] 
[ 0 0 0 -1 -1 0 -1 -1 -1 0] 
[ 0 -1 0 0 -1 -1 -1 0 -1 0] 
[-1 -1 -1 -1 -1 0 -1 0 -1 0]] 

私はすでに内容を1と比較しているので、nonzero()は必要ないと知っていますが、それは私が得た最高のものです。

私は間違っていますか?正しい答えを得る方法はありますか?

答えて

2

使用numpy.where条件付きmatに基づいて要素を選択する:

import numpy as np 
mat = np.random.randint(2, size=(10, 10)) 
index = [6,7,8,9] 

mat[index,:] = np.where(mat[index,:],-1,mat[index,:]) 
print(mat) 

これは、元の値のtruthinessに応じmatの所与の行が上書きされます。それらの行の元の値が1だった場合、それらは-1で上書きされます。そうでない場合、それらはそのまま残されます。

mat[index,:] = -mat[index,:] 
+0

あなたが正しいです:

あなたが唯一の0と1のバイナリ行列を持っている場合、あなただけの0いるので、与えられた行のすべての要素の符号を反転することもできますが、この変換に対して不変であるが、

'mat [index ,:] = -mat [index、:]'それは私に打たれなかった。回答ありがとう – Akshay

+0

@akshay私は助けることができてうれしいです:) –

関連する問題