2011-09-12 3 views
2

큰 배열의 경우 여러 조건이 모두 True인지 또는 둘 다 False인지를 빠르게 확인하는 방법은 무엇입니까? 운영자를 선택하는 것이 효과가 있습니까? 그 이유는 무엇? 여기 더미 예입니다 :이 속도 중요합니다 그래서 확실하지 않다두 조건이 참인지 확인하는 가장 빠른 방법은 무엇입니까?

import numpy 
a = numpy.ones((1000000,)) 
b = numpy.zeros((1000000,)) 

#c = (a == 1) * (b == 0) 
#c = (a == 1) & (b == 0) 
# other faster method of getting c? 

통지 편집 ...

+1

편집은 조건이 항상 두 배열에서 동일하지 않다는 것을 분명히합니다. – Benjamin

+2

이 최적화가 중요합니까? 코드를 프로파일 링했는데이 섹션이 너무 느린 것으로 나타 났습니까? – Daenyth

+0

@Daenyth : 호기심. – Benjamin

답변

0

있지만,이 경우 현재 위치에서 작업을 사용하여 메모리를 절약 할 수 있습니다. 이 배열의 하나 개 적은 수의 임시 사본을 필요로하고 더 적은 메모리를 사용한다

c = a == 1 
c &= b == 0 # (Or *=) 

:

같은 것을보십시오.

+0

좋은 지적. & =보다 빠르고 (= =) 또는 동등합니까? – Benjamin

+0

내가 아는 한, 정상적인 환경에서는 큰 차이가 없어야합니다. 내 신속하고 더러운 프로파일 링이 동의하는 것 같습니다. –

0

연산자의 Short-circuiting을 이용할 수 있습니다. 그리고이 단락은 다른 운영자의 상황에 따라 다릅니다.

+0

숫자가 적은 배열의 경우에는 이것이 도움이되지 않습니다. 결과는 동일한 길이의 또 다른 배열입니다. 단락 할 것이 없습니다. –

관련 문제