我怎样才能迫使减法在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
。
底线
我怎样才能迫使被签署了两项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的符号类型之一。
做这些值实际上需要UINT16代替INT16?除非他们能够采取2**15
以上(但仍低于2**16
)的值,你可以简单地将其作为保持和INT16用它做 - 无符号整数,因为你发现了,可能会非常棘手(不只是在numpy的; - )。如果你确实需要的UINT16,然后蒙上大卫建议将工作,但如果你可以简单地INT16使用它会更快,更具可读性。
顺便说一句,这看起来point.threshold是float,不是int(好东西太多,否则该部门将编写这将是一个截断之一,除非你从未来进口真分裂的方式,如已经在Python中的许多2.*
发布了支持 - 而终于方式划分在3.*
工作)。在.0
的25.0
“使得它”,并显示它的浮子,不是int。
不隶属于 StackOverflow