0

背景を気にしない場合は、一番下の行にスキップできます。

私は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ます。

結論

uint2 つの s の減算に署名を強制するにはどうすればよいですか?

4

3 に答える 3

2

ここでは uint以外のほとんどすべて機能するため、減算を行う前にこれらを別のものにキャストしてください。

しきい値 = 25.0 (小数点に注意) であるため、これは float であるため、uint を使用しない限り、減算と除算はすべて機能します。

于 2009-08-27T18:24:35.110 に答える
2

まあ、明白な解決策はおそらくフロートにキャストすることでしょう:

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

または、派手な符号付きタイプのいずれかにキャストできると思います。

于 2009-08-27T18:11:59.597 に答える
0

これらの値は、実際には int16 ではなく uint16 である必要がありますか? 2**15それらが以上の値を取ることができる必要がない限り(ただし、それでも以下2**16)、単にそれらを int16 として保持し、それで完了することができます-あなたが発見したように、符号なしintはトリッキーになる可能性があります(numpyだけではありません;-) . uint16が必要な場合は、Davidが提案するキャストが機能しますが、単純にint16を使用できる場合は、より高速で読みやすくなります。

ところで、point.threshold は int ではなく float であるように見えます (これも良いことです。サポートされているように、未来から真の除算をインポートしない限り、コーディング方法の除算は切り捨てられます)。 Pythonの多くの2.*リリースで -- そして最終的には で除算が機能する方法です3.*)。.0in は「25.0与える」ものであり、int ではなく float であることを示しています。

于 2009-08-27T18:24:44.343 に答える