2016-03-30 19 views
3

Yeni 2d dizisini başlatmak için kullanmak istediğim 3 2d dizilerim var. Yeni 2d-dizisi, diğer 3 dizinin (x, y) konumlarındaki değerlere bağlı olarak 0 veya 1 (x, y) konumunda olmalıdır.Diğer dizilerden eşik değerlerine dayalı yeni 2d numpy dizisi oluştur

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]] 

Ve bir mantık fonksiyonunu: Şimdi

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

:

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

Bu 2d-dizi oluşturmak gerekir

Örneğin, ben bu 3 2d-diziler var Bunu döngüler için 2 ile yapabilirim, ama daha hızlı uyuşmuş bir yol olup olmadığını merak ediyordum?

DÜZENLEME: Burada

benim gerçek kod bir örnektir:

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

Ama bu hatayı alıyorum:

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() 

EDIT2:

ben kullanım olmalı yerine and d & operatörü (benzer '|' or vs)

+0

http://stackoverflow.com/questions/21996661/combining-logic-statements-and-in-numpy-array de bu çözebilir. –

cevap

5

A, B ve C, sadece numpy diziler dönüştürmek ve kullanma D için hesaplamak zorunda Verilen:

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

Teşekkürler, ancak bu “ValueError” üretir: Birden fazla öğe içeren bir dizinin gerçek değeri belirsizdir. A.any() veya a.all() ' – appel

+0

hmm'yi kullanın. Verdiğiniz ve kullandığınız örneği kullanarak her şeyi tekrar kontrol ettim. Kodunuzun ekran görüntüsünü gönderebilir misiniz? – jtitusj

+0

Ayrıca, D = np.logical_and (A> 4, np.logical_and (B < 5, C > 5)) astype (int) 'deneyebilirsiniz. – jtitusj

3

deneyin:

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)