Frage

Sie können auf der unteren Zeile überspringen, wenn Sie nicht über den Hintergrund ist es egal:

Ich habe den folgenden Code in Python:

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

Was mir falsche Werte gibt. Zum Beispiel für:

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

Ich habe:

ratio:  -0.000320556853048

Welche falsch ist.

Ein Blick in sie, erkannte ich, dass self.points[0].value und self.points[1].value] are of the typenumpy.uint16`, so habe ich:

21 - 46 = 65511

Während ich nie definiert einen Typ für point.threshold. Ich kann es nur zugewiesen. Ich stelle mir einen Plain-Vanilla-int bekam.

The Bottom Line

Wie kann ich die die Subtraktion zweier uints zwingen unterzeichnet werden?

War es hilfreich?

Lösung

Fast alles und uints wird hier arbeiten, so werfen gerade diese auf etwas anderes, bevor Sie die Subtraktion tun.

Da threshold = 25,0 (der Dezimalpunkt beachten), dann ist es ein Schwimmer, so die Subtraktion und Division werden alle arbeiten, solange Sie nicht uints verwenden.

Andere Tipps

Nun, die offensichtliche Lösung wahrscheinlich zu cast Schwimmer sein würde:

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

Oder ich nehme an, Sie zu einem der numpy unterzeichnete Typen stellen könnten.

Sie müssen diese Werte tatsächlich statt int16 sein uint16? Es sei denn, sie zu nehmen Werte von 2**15 in die Lage sein oder höher (aber immer noch unter 2**16) konnte man sich einfach als int16 halten und mit ihm getan werden - unsigned ints, wie Sie entdecken kann schwierig sein (und nicht nur in numpy; -). Wenn Sie die uint16 brauchen, dann wirft wie David Willen Arbeit legt nahe, aber wenn man einfach int16 verwenden kann, wird es schneller und besser lesbar sein.

BTW, sieht es so aus, dass point.threshold ein Schwimmer ist, kein int (gut so, sonst die Teilung so, wie Sie Code es ein Verkürzen sein würde, es sei denn, Sie echte Division aus der Zukunft importieren, als und schließlich der Weg Abteilung arbeitet in 2.*) - wurde in vielen 3.* Versionen von Python unterstützt. Die .0 in 25.0 „gibt es weg“ und zeigt es ist ein Schwimmer, kein int.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top