Question

L' ufunc.reduce pour numpy.bitwise_and.réduire ne semble pas se comporter correctement...suis-je utiliser?

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

Le résultat de reduce() devrait être la dernière valeur de accumulate() et il n'est pas.Ce qui me manque ici?

Pour le moment, je peux contourner en utilisant DeMorgan identité (échange OU et ET, et l'entrée inverseuse et la sortie):

>>> ~np.bitwise_or.reduce(np.invert(x))
17
Était-ce utile?

La solution

Selon les documents que vous avez fournis, ufunc.reduce utilise op.identity comme une valeur initiale.

numpy.bitwise_and.identity est 1, pas 0xffffffff.... ni -1.

>>> np.bitwise_and.identity
1

Donc numpy.bitwise_and.reduce([0x211f,0x1013,0x1111]) est équivalent à:

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

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

Il semble y avoir aucun moyen de spécifier la valeur initiale conformément à la documentation.(contrairement à Python builtin fonction reduce)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top