วิธีแก้ไข: runtimewarning: พบค่าที่ไม่ถูกต้องใน double_scalars


ข้อผิดพลาดที่คุณอาจพบใน Python คือ:

 runtimewarning: invalid value encountered in double_scalars

ข้อผิดพลาดนี้เกิดขึ้นเมื่อคุณพยายามดำเนินการทางคณิตศาสตร์ที่เกี่ยวข้องกับจำนวนที่น้อยมากหรือมากเป็นพิเศษ และ Python ก็แค่สร้างค่า NaN ตามผลลัพธ์

ตัวอย่างต่อไปนี้แสดงวิธีการแก้ไขข้อผิดพลาดนี้ในทางปฏิบัติ

วิธีการทำซ้ำข้อผิดพลาด

สมมติว่าเราพยายามดำเนินการทางคณิตศาสตร์ต่อไปนี้ด้วยอาร์เรย์ NumPy สองตัว:

 import numpy as np

#define two NumPy arrays
array1 = np. array ([[1100, 1050]])
array2 = np. array ([[1200, 4000]])

#perform complex mathematical operation
n.p. exp (-3*array1). sum () / np. exp (-3*array2). sum ()

RuntimeWarning: invalid value encountered in double_scalars

เราได้รับ RuntimeWarning เนื่องจากผลลัพธ์ในตัวส่วนนั้นใกล้กับศูนย์มาก

ซึ่งหมายความว่าคำตอบสำหรับปัญหาการหารจะมีขนาดใหญ่มากและ Python ไม่สามารถจัดการค่าที่มากขนาดนี้ได้

วิธีการแก้ไขข้อผิดพลาด

โดยทั่วไปวิธีการแก้ไขข้อผิดพลาดประเภทนี้คือการใช้ฟังก์ชันพิเศษจากไลบรารี Python อื่นที่สามารถจัดการค่าที่เล็กมากหรือใหญ่มากในการคำนวณได้

ในกรณีนี้ เราสามารถใช้ฟังก์ชัน logsumexp() จากไลบรารี SciPy ได้:

 import numpy as np
from scipy. special import logsumexp

#define two NumPy arrays
array1 = np. array ([[1100, 1050]])
array2 = np. array ([[1200, 4000]])

#perform complex mathematical operation
n.p. exp (logsumexp(-3*array1) - logsumexp(-3*array2))

2.7071782767869983e+195

โปรดทราบว่าผลลัพธ์มีขนาดใหญ่มาก แต่เราไม่ได้รับข้อผิดพลาดใดๆ เนื่องจากเราใช้ฟังก์ชันทางคณิตศาสตร์พิเศษจากไลบรารี SciPy ที่ออกแบบมาเพื่อจัดการกับตัวเลขประเภทนี้

ในหลายกรณี คุ้มค่าที่จะมองหาฟังก์ชันพิเศษใน ไลบรารี SciPy ที่สามารถจัดการกับการดำเนินการทางคณิตศาสตร์ขั้นสูงได้ เนื่องจากฟังก์ชันเหล่านี้ได้รับการออกแบบมาโดยเฉพาะสำหรับการคำนวณทางวิทยาศาสตร์

หมายเหตุ : คุณสามารถค้นหาเอกสารออนไลน์ฉบับสมบูรณ์สำหรับฟังก์ชัน logsumexp() ได้ที่นี่

แหล่งข้อมูลเพิ่มเติม

บทช่วยสอนต่อไปนี้จะอธิบายวิธีแก้ไขข้อผิดพลาดทั่วไปอื่นๆ ใน Python:

วิธีแก้ไข KeyError ใน Pandas
วิธีแก้ไข: ValueError: ไม่สามารถแปลง float NaN เป็น int
วิธีแก้ไข: ValueError: ตัวถูกดำเนินการไม่สามารถออกอากาศด้วยรูปร่างได้

เพิ่มความคิดเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *