您可以跳过底线,如果你不关心的背景:

我在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

底线

我怎样才能迫使被签署了两项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的符号类型之一。

做这些值实际上需要UINT16代替INT16?除非他们能够采取2**15以上(但仍低于2**16)的值,你可以简单地将其作为保持和INT16用它做 - 无符号整数,因为你发现了,可能会非常棘手(不只是在numpy的; - )。如果你确实需要的UINT16,然后蒙上大卫建议将工作,但如果你可以简单地INT16使用它会更快,更具可读性。

顺便说一句,这看起来point.threshold是float,不是int(好东西太多,否则该部门将编写这将是一个截断之一,除非你从未来进口真分裂的方式,如已经在Python中的许多2.*发布了支持 - 而终于方式划分在3.*工作)。在.025.0“使得它”,并显示它的浮子,不是int。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top