2014-01-10 2 views
2

numpy.bitwise_and.reduce에 대한 ufunc.reduce이 제대로 작동하지 않는 것 같습니다 ... 제가 잘못 사용하고 있습니까?numpy.bitwise_and.reduce가 예기치 않게 작동합니까?

>>> import numpy as np 
>>> x = [0x211f,0x1013,0x1111] 
>>> np.bitwise_or.accumulate(x) 
array([ 8479, 12575, 12575]) 
>>> np.bitwise_and.accumulate(x) 
array([8479, 19, 17]) 
>>> '%04x' % np.bitwise_or.reduce(x) 
'311f' 
>>> '%04x' % np.bitwise_and.reduce(x) 
'0001' 

reduce()의 결과는 accumulate()의 마지막 값이어야하며 그렇지 않다. 내가 여기서 무엇을 놓치고 있니? ufunc.reduce 초기 값으로 op.identity을 사용하여, 사용자가 제공 한 문서에 따르면

>>> ~np.bitwise_or.reduce(np.invert(x)) 
17 
+0

버전 1.12.0부터 'np.bitwise_and'의 ID에 올바른 값 (-1)이 표시되어야합니다. [PR # 7373] (https://github.com/numpy/numpy/pull/7373)을 참조하십시오. 그건 그렇고, 아주 멋진 해결 방법! –

답변

2

:

순간

, 나는 (OR 교환 및 AND, 입력 및 출력을 반전) 드 모르 강의의 ID를 사용하여 해결할 수 있습니다 .

numpy.bitwise_and.identity0xffffffff....이나 -1이 아니라 1입니다.

>>> np.bitwise_and(np.bitwise_and(np.bitwise_and(1, 0x211f), 0x1013), 0x1111) 
1 
>>> 1 & 0x211f & 0x1013 & 0x1111 
1 

>>> -1 & 0x211f & 0x1013 & 0x1111 
17 

이 문서에 따라 초기 값을 지정하는 방법은없는 것 같다 :

>>> np.bitwise_and.identity 
1 

그래서 numpy.bitwise_and.reduce([0x211f,0x1013,0x1111])은 동일합니다. (파이썬 내장 함수와 달리 reduce)

+1

아, 알겠습니다. 감사. ufunc.reduce가 명시적인 초기 값 인수를 허용하지 않는 것은 부끄러운 일입니다. –

+0

@ JasonS, 네, ufunc.reduce로 초기 값을 지정할 수 있다면 좋을 것입니다. – falsetru

+0

지난 몇 년 동안 변경 되었습니까? –

관련 문제