どのように私はPythonで署名される減算を強制することができますか?
-
20-09-2019 - |
質問
あなたが背景を気にしない場合は、一番下の行にスキップすることができます:
私はPythonで、次のコードを持っています:
ratio = (point.threshold - self.points[0].value) / (self.points[1].value - self.points[0].value)
私に間違った値を与えています。たとえば、ためます:
threshold: 25.0
self.points[0].value: 46
self.points[1].value: 21
私が持ってます:
ratio: -0.000320556853048
間違ってどちらます。
これを見ると、私はそのself.points[0].value
とself.points[1].value] are of the type
numpy.uint16`を実現したので、私は持ってます:
21 - 46 = 65511
私はpoint.threshold
の型を定義したことはありませんしながら。私はちょうどそれを割り当てます。私はそれは、プレーンバニラint
を得た想像します。
ボトムライン
どのように私は2つのuint
sの減算が署名することを強制することができますか?
解決
ほとんど何のが、をするuintは、ここで働いあなたが減算を行う前に、これだけ何か他のものにこれらをキャストします。
しきい値以来= 25.0(小数点以下の点に注意してください)、それはフロートだ、減算、除算はすべての作業は限り、あなたはするuintを使用していないとなりますのでます。
他のヒント
さて、明白な解決策は、おそらく山車にキャストすることです。
ratio = (float(point.threshold) - float(self.points[0].value)) / (float(self.points[1].value) - float(self.points[0].value))
または私はあなたがnumpyの署名のいずれかのタイプにキャストすることができたとします。
これらの値は、実際にはint16の代わりにuint16のことする必要がありますか? ;トリッキー(だけでなく、numpyのにすることができ、あなたが発見したとして、符号なし整数型 - 彼らは2**15
か(まだ2**16
以下)以上の値をとることができるように持っている場合を除き、あなたは、単にINT16としてそれらを保つことができるし、それを使って行うこと - )。あなたがuint16のが必要な場合はダビデが示唆するように、そして動作しますが、あなたは、単にそれINT16使用することができた場合には、より速く、より読みやすくなりますキャストします。
ところで、それは同様に、あなたが未来から真の分裂をインポートしている場合を除き、あなたがそれをコーディング方法は、切り捨てるものであろうに見えます)、最後に除算が2.*
で動作する方法である - のPythonの多く3.*
のリリースではサポートされています。 .0
で25.0
「は、それを離れて与え」、それがフロート、int型ではないのです示しています。