2017-05-06 10 views
1

配列内のブール値をテストし、その答えに基づいて行列に対して要素単位の操作を適用する必要があります。私は行のためのブールの答えを取得しているようで、個々の要素自体のためではないようです。私はどのようにテストし、個々の要素の答えを得るのですか?要素単位のブール値行列のテスト

iは、確率

probs = np.array([[0.1, 0.2, 0.3, 0.3, 0.7], 
        [0.1, 0.2, 0.3, 0.3, 0.7], 
        [0.7, 0.2, 0.6, 0.1, 0.0]]) 

のマトリックスと試験配列

tst = ([False, False, True, True, False], 
     [True, False, True, False, False], 
     ) 
t = np.asarray(tst).astype('bool') 

のマトリックスと私は答えを出力する書かれているコードのこのセグメントを持っているが、明らかに行全体をテストすべてが偽であるからです。

for row in tst: 
    mat = [] 
    for row1 in probs: 
     temp = [] 
     if row == True: 
      temp.append(row1) 
     else: temp.append(row1-1) 
     mat.append(temp) 

mat 
Out[42]: 
[[array([-0.9, -0.8, -0.7, -0.7, -0.3])], 
[array([-0.9, -0.8, -0.7, -0.7, -0.3])], 
[array([-0.3, -0.8, -0.4, -0.9, -1. ])]] 

私はTSTの第一の配列のために

[[-0.9, -0.8, 0.3, 0.3, -0.3], 
[-0.9, -0.8, 0.3, 0.3, -0.3], 
[-0.3, -0.8, 0.6, 0.1, -1] 

する新しい行列を必要としています。助けてくれてありがとう!

答えて

0

あなたはテストがTrueとsubstract 1である場合は、ブール値のリストを比較しているので、そうでない場合は

あなたのループが動作しない、そのままの値を維持する必要があります。 (すべての要素に1を引く)

私の解決策:ブール値の行を値の行に引きますが、真と偽を反転します(Trueの場合は引くことはできません。 、substract):各反復について

for row in tst: 
    mat = [] 
    for row1 in probs: 
     mat.append(row1-[not v for v in row]) 

    print(np.asarray(mat)) 

プリント()(あなたがあなたのマトリックスで2つの真理値表を組み合わせているので、あなたは2つの結果を持っていることに注意してください):

[[-0.9 -0.8 0.3 0.3 -0.3] 
[-0.9 -0.8 0.3 0.3 -0.3] 
[-0.3 -0.8 0.6 0.1 -1. ]] 
[[ 0.1 -0.8 0.3 -0.7 -0.3] 
[ 0.1 -0.8 0.3 -0.7 -0.3] 
[ 0.7 -0.8 0.6 -0.9 -1. ]] 

(私はありませんnumpyエキスパート全員、これは不器用な場合はごめんなさい、コメント歓迎)

+0

おかげで、これは素晴らしいです! –

0

ここでループは必要ありません。配列と対応するマスク配列があります。

probs[np.invert(tst)]-=1. 

マスクは真の値を返します。あなたは偽の値を望んでいないので、tst配列を逆転させます。

# This would be a longer version, if you are not familiar with the synthax above 
probs[np.invert(tst)]=probs[np.invert(tst)]-1. 

新しいnumpyの配列を作成したい場合は(あなたのコードでnumpyの-アレイのリストを作成した)それは例えばこのように動作します。

# copy the numpy array 
mat=np.copy(probs) 
mat[np.invert(tst)]=probs[np.invert(tst)]-1 

私は最初のビューの初心者チュートリアルを見てみることをお勧めだろうあなたは、たとえばリストとnumpyの-配列およびそれらをどのように扱うようにとの違いを知っていれば、プログラミングがはるかに簡単になります。

https://www.scipy.org/scipylib/faq.html#what-advantages-do-numpy-arrays-offer-over-nested-python-lists https://docs.scipy.org/doc/numpy-dev/user/quickstart.html

または短い説明

Python List vs. Array - when to use?

+0

=)はい、本当に残念ながら、これは2日以内に予定されています。私は深い終わりには、Pythonのエクスペリエンスなしで、非常にほとんどプロンプトがない状態で進んでいます。はい!新しい配列を作ることは私が必要としていたものでした。ありがとう。 –

関連する問題