2009-08-27 7 views
0

あなたが背景を気にしない場合は、一番下の行にスキップすることができますどのように減算を強制的にPythonで署名できますか?

私は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 

を。

21 - 46 = 65511 

私はpoint.thresholdのためのタイプを定義したことがないものの:

は、それを見ると、私はself.points[0].valueself.points[1].value] are of the type numpy.uint16`ので、私が得たことに気づきました。私はちょうどそれを割り当てた。私はそれがプレーンなバニラを持っていると想像しますint

ボトムライン

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

答えて

2

ほとんど何でもしかし uintsはここで動作しますので、減算を行う前にこれらを別のものにキャストしてください。

threshold = 25.0(小数点に注意)なので、それは浮動小数点型なので、uintを使用しない限り、減算と除算はすべて機能します。

2

まあ、明白な解決策は、おそらく山車にキャストするために、次のようになります。

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

または私はあなたがnumpyの署名のいずれかのタイプにキャストする可能性があるとします。

0

これらの値は実際にはint16ではなくuint16である必要がありますか? 2**15以上(ただしまだ2**16以下)の値を取らなければならない場合を除いて、単純にint16としておくことができます。 - )。 uint16が必要な場合は、Davidが提案するようにキャストしますが、単純にint16を使用することができれば、より高速で読みやすくなります。

ところで、point.thresholdは浮動小数点数ではなく、int型ではありません。そうでなければ、その除算は、将来の真の分割をインポートしない限り、 Pythonの多くの2.*リリースでサポートされているように - そして最後には道の部門が3.*で動作します)。 .025.0で、 "それは離れています"と表示され、intではなく浮動小数点数です。

+0

データがuint16形式のバイナリファイルからデータを読み込んでいます。 –

+0

しかし、彼らは署名されていなくてはなりませんか、つまり実際には '2 ** 15 'と' 2 ** 16'の間の値を取っていますか?それ以外の場合は、符号なし整数と符号付き整数のバイナリ形式に違いはありません。 –

関連する問題