どのように私はPythonで署名される減算を強制することができますか?

StackOverflow https://stackoverflow.com/questions/1342782

  •  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].valueself.points[1].value] are of the typenumpy.uint16`を実現したので、私は持ってます:

21 - 46 = 65511

私はpoint.thresholdの型を定義したことはありませんしながら。私はちょうどそれを割り当てます。私はそれは、プレーンバニラintを得た想像します。

ボトムライン

どのように私は2つのuintsの減算が署名することを強制することができますか?

役に立ちましたか?

解決

ほとんど何のが、をする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使用することができた場合には、より速く、より読みやすくなりますキャストします。

そのpoint.thresholdがfloat、あまりにもINT(良いもの、そうでない場合はその部門であるように、

ところで、それは同様に、あなたが未来から真の分裂をインポートしている場合を除き、あなたがそれをコーディング方法は、切り捨てるものであろうに見えます)、最後に除算が2.*で動作する方法である - のPythonの多く3.*のリリースではサポートされています。 .025.0「は、それを離れて与え」、それがフロート、int型ではないのです示しています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top