سؤال

يمكنك الانتقال إلى النتيجة النهائية إذا كنت لا تهتم بالخلفية:

لدي الكود التالي في بايثون:

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 typenumpy.uint16`، لذلك حصلت على:

21 - 46 = 65511

على الرغم من أنني لم أحدد أبدًا نوعًا لـ point.threshold.لقد قمت بتعيينه للتو.أتصور أنها حصلت على الفانيليا عادي int.

الخط السفلي

كيف يمكنني فرض الطرح من اثنين uintليتم التوقيع؟

هل كانت مفيدة؟

المحلول

أي شيء تقريبا لكن ستعمل uints هنا، لذا قم بإلقاء هذه العناصر على شيء آخر قبل إجراء عملية الطرح.

نظرًا لأن العتبة = 25.0 (لاحظ العلامة العشرية)، فهي عبارة عن عدد عائم، لذا ستعمل جميع عمليات الطرح والقسمة طالما أنك لا تستخدم الوحدات.

نصائح أخرى

وكذلك، فإن الحل الواضح أن من المحتمل أن يكون ليلقي ليطفو:

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

وأو أفترض أنك يمكن أن يلقي لأحد أنواع نمباي الموقعة.

هل هذه القيم فعلا بحاجة إلى أن تكون uint16 بدلا من int16؟ إلا أنها يجب أن تكون قادرا على اتخاذ قيم 2**15 أو أعلى (ولكن لا يزال أقل 2**16) هل يمكن ببساطة الاحتفاظ بها كما int16 وينبغي القيام به مع ذلك - [إينتس] غير موقعة، كما يمكنك اكتشاف، يمكن أن تكون خادعة (وليس فقط في نمباي. -). إذا كنت بحاجة إلى uint16، ثم يلقي كما يقترح ديفيد أعمال الإرادة، ولكن إذا كان يمكنك ببساطة استخدام int16 سيكون أسرع وأكثر قابلية للقراءة.

وراجع للشغل، يبدو أن point.threshold هو تعويم، وليس عدد صحيح (شيء جيد جدا، وإلا أن تقسيم الطريق كنت رمز فإنه سيكون واحد اقتطاع، إلا إذا كنت استيراد تقسيم حقيقي من المستقبل، كما وقد تم دعم في العديد من الإصدارات 2.* من بيثون - وأخيرا يعمل THE تقسيم الطريقة 3.*). و.0 في 25.0 "يعطيها بعيدا" ويظهر انها تطفو، وليس عدد صحيح.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top