2

for numpy.bitwise_and.reduce的ufunc.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()而不是。我在这里想念什么?

目前,我可以通过使用 DeMorgan 的身份(交换 OR 和 AND,以及反转输入和输出)来解决问题:

>>> ~np.bitwise_or.reduce(np.invert(x))
17
4

1 回答 1

2

根据您提供的文档,ufunc.reduce用作op.identity初始值。

numpy.bitwise_and.identity1,不是,0xffffffff....也不是-1

>>> np.bitwise_and.identity
1

所以numpy.bitwise_and.reduce([0x211f,0x1013,0x1111])相当于:

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

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

似乎没有办法根据文档指定初始值。(与 Python 内置函数不同reduce

于 2014-01-10T17:53:49.533 回答