어떻게 강제로 빼기 서명할 파이썬?
-
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 에 서명할?
해결책
거의 아무것도 지 uints 과가 있을 수 있습니다,그래서 그냥 주 이하는 다른 무언가를하기 전에 빼기입니다.
이후 한계값=25.0(참고 소수점),그것의 float,그래서 빼기 및 부분이 모든 작업을 만큼 당신이 사용하지 않는 uints.
다른 팁
만,확실한 해결책은 아마 캐스팅을 떠:
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 및 수행과 그것--unsigned 수로,당신은 발견되는 까다로울 수 있(지에 numpy;-).해야 하는 경우에 uint16,다음 캐스팅으로 다윗이 제안이 작동하지만 경우에 당신은 단순히 사용 int16 것이 더 빠르고 읽을 수 있습니다.
BTW,그것은 다음과 같습니다.임계값 float,지 int(좋은 일도 그렇지 않으면 그 부문은 방법은 당신이 코드 그것을 잘라내는 하나 당신에게 좋은 아이디어를 줄 것이 가져오는 진정한 부서에서 미래,으로 지원되었에서 많 2.*
릴리즈 파이썬은--그리고 마지막으로 방문 작품에서 3.*
).이 .0
에 25.0
"그것다"그리고 그는 부유물이 아닌 int.