2016-06-10 2 views
0

아주 기본적인 질문 인 경우 여기에 대한 답변을 찾아 보았습니다. 죄송합니다. 나는 Numpy 배열을 3 개의 다른 배열의 같은 인덱스에서 값을 비교하여 생성 된 부울 Numpy 배열을 사용하여 필터링하고 있습니다. 내 비교는 모든 인덱스 i에 대해 x [i] == y [i] & x [i]! = z [i]라고하는 2 개의 부울 구문으로 구성됩니다. 여기에 골치 아픈 결과는 다음과 같습니다Python 2.x True & False를 반환하는 경우 매우 구체적인 경우

x[8]=25 

y[8]=27 

z[8]=13 

x[8]==y[8] 

False 

x[8]!=z[8] 

True 

x[8]==y[8] & x[8]!=z[8] 

True 

당신이 볼 수 있듯이, 위의 거짓 & true를 돌려줍니다 진정한. 내가 뭘 놓치고 있니?

x[3]=24 

y[3]=18 

z[3]=27 

x[3]==y[3] 

False 

x[3]!=z[3] 

True 

x[3]==y[3] & x[3]!=z[3] 

False 

당신이 볼 수 있듯이,이 예제는 잘 작동 : 내 좌절의 또 다른 예를 들어, 여기에 적절한 결과를 반환 동일한 배열의 또 다른 예입니다. 어떤 도움을 주시면 감사하겠습니다.

감사합니다.

답변

2

무엇이 누락 되었습니까?

당신이 놓치고있는 괄호 : 또한

(x[8]==y[8]) & (x[8]!=z[8]) 

, 당신은 오히려 인덱스를 통해 반복하는 것보다, 전체 배열을 통해 벡터화 작업으로이 일을해야한다. 바라건대, 당신은 당신의 실제 코드에서 그 일을하고, 당신은 단지 예를 간단하게 여기에 특정 인덱스를 사용 :

(x == y) & (x != z) # Evaluates to an array of booleans. 

&는 논리 AND 비트 AND 연산자가 아니라 논리적 and 이후 수 ' 브로드 캐스팅을 위해 과부하 될 경우 (이유가 있음) NumPy는 부울 배열에서 논리 AND에 대해 &을 사용합니다. &and과 다른 우선 순위를 가지므로 and으로 괄호로 묶을 필요가없는 일부 연산을 괄호로 묶어야합니다.

+0

"NumPy는 부울 배열에 대해 논리 AND에 대해 &'를 사용합니다. 부울에 대한 논리 및 비트 연산은 본질적으로 동일하므로 (특히 True를 1로, False를 0으로 간주하는 경우)) – DeepSpace

+0

고마워요! 이것은 훌륭한 대답이었고 즉시 모든 것을 고쳤습니다. 그리고 예, 저는 특정 지표를 예제로 사용했습니다. 다시 한 번 감사드립니다! – golfrguy04

-1

않음 (X [8] == Y [8]) & (X [8]! = Z [8]) 또는 더 나은 X [8] == Y [8] 및 X [7] ! = z [8]

관련 문제