2016-03-30 11 views
3

新しい2次元配列を初期化するために使用する3次元配列が3つあります。 新しい2d配列には、他の3つの配列の(x、y)位置の値に応じて、位置(x、y)に0または1のいずれかを設定する必要があります。他の配列のしきい値に基づいて新しい2次元配列を作成する

例えば、私は、これらの3二次元配列を有する:

A = [[2, 3, 6], B = [[5, 9, 0], C = [[2, 7, 6], 
    [9, 8, 3],   [2, 4, 3],   [2, 1, 6], 
    [1, 0, 5]]   [4, 5, 1]]   [4, 6, 8]] 

AND論理関数:今

D = [[0, 0, 1], 
    [0, 0, 0], 
    [0, 0, 1]] 

D = (A > 4 && B < 5 && C > 5) 

これは、2Dアレイを作成する必要があります私は2つのループを使ってこれを行うことができますが、より速いnumpyの方法があるかどうか疑問に思っていましたか?

EDIT

ここに私の実際のコードのサンプルです:

val_max = 10000 
a = np.asarray(array_a) 
b = np.asarray(array_b) 
d = ((a >= val_max) and (b >= val_max)).astype(int) 

しかし、私はこのエラーを取得:EDIT2

Traceback (most recent call last): 
    File "analyze.py", line 70, in <module> 
    d = ((a >= val_max) and (b >= val_max)).astype(int) 
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() 

を:

私は使用する必要があります代わりにandのD &オペレータ(のための同様の '|' or対)

+0

http://stackoverflow.com/questions/21996661/combining-logic-statements-and-in-numpy-arrayでも解決できる場合があります。 –

答えて

5

A、B、及びCは、あなただけのnumpyの配列に変換して使用してDのために計算しておく必要があるとします。

import numpy as np 

A = np.asarray(A) 
B = np.asarray(B) 
C = np.asarray(C) 

D = ((A > 4) & (B < 5) & (C > 5)).astype(int) 
+0

ありがとうございますが、これは 'ValueErrorを生成します:複数の要素を持つ配列の真理値はあいまいです。 a.any()またはa.all() ' – appel

+0

hmm ..あなたが与えたサンプルを使ってすべてを再確認し、それがうまくいった。あなたのコードのスクリーンショットを投稿できますか? – jtitusj

+0

また、 'D = np.logical_and(A> 4、np.logical_and(B < 5, C > 5))。astype(int)'を試すこともできます。 – jtitusj

3

試してみてください:

import numpy as np 
A = np.asarray(A) 
B = np.asarray(B) 
C = np.asarray(C) 
D = ((A > 4) & (B < 5) & (C > 5)).astype(int) 
関連する問題