Question

Vous pouvez passer à la ligne de fond si vous ne se soucient pas de l'arrière-plan:

Je le code suivant en Python:

ratio = (point.threshold - self.points[0].value) / (self.points[1].value - self.points[0].value)

Ce qui me donne de mauvaises valeurs. Par exemple, pour:

threshold:  25.0
self.points[0].value:  46
self.points[1].value:  21

Je suis:

ratio:  -0.000320556853048

Ce qui ne va pas.

En regardant dans, j'ai réalisé que self.points[0].value et self.points[1].value] are of the typenumpy.uint16`, alors je suis:

21 - 46 = 65511

Alors que je ne défini un type pour point.threshold. Je viens de lui assignait. J'imagine qu'il a un int vanilles.

The Bottom Line

Comment puis-je forcer la soustraction de deux uints à signer?

Était-ce utile?

La solution

Presque tout mais uints travailleront ici, donc juste jeter ces à autre chose avant de faire la soustraction.

Depuis seuil = 25,0 (notez le point décimal), il est un flotteur, de sorte que la soustraction et division tous les travaux aussi longtemps que vous ne l'utilisez uints.

Autres conseils

Eh bien, la solution évidente serait probablement de jeter aux flotteurs:

ratio = (float(point.threshold) - float(self.points[0].value)) / (float(self.points[1].value) - float(self.points[0].value))

Ou je suppose que vous pourriez jeter à l'un des types numpy signé.

Est-ce que ces valeurs doivent effectivement être Uint16 au lieu de int16? À moins qu'ils doivent être en mesure de prendre des valeurs de 2**15 ou au-dessus (mais encore en dessous 2**16) vous pouvez simplement les garder comme int16 et faire avec elle - ints non signés, comme vous avez découvert, peut être difficile (et pas seulement dans numpy; -). Si vous avez besoin du uint16, alors que David jette suggère fonctionnera, mais si vous pouvez simplement utiliser Int16 il sera plus rapide et plus facile à lire.

BTW, il ressemble à ce que point.threshold est un flotteur, pas un int (bonne chose, sinon que la division de la façon dont vous le code que ce serait un tronquer un, à moins que vous importez vrai division de l'avenir, a été pris en charge dans de nombreux communiqués de 2.* de Python - et est enfin la division façon fonctionne en 3.*). Le .0 en 25.0 « donne de suite » et montre qu'il est un flotteur, pas int.

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