วิธีแก้ไข: numpy.linalg.linalgerror: เมทริกซ์เอกพจน์
ข้อผิดพลาดที่คุณอาจพบใน Python คือ:
numpy.linalg.LinAlgError: Singular matrix
ข้อผิดพลาดนี้เกิดขึ้นเมื่อคุณพยายามกลับเมทริกซ์เอกพจน์ ซึ่งตามคำจำกัดความแล้วคือเมทริกซ์ที่มีดีเทอร์มิแนนต์เป็นศูนย์และไม่สามารถกลับด้านได้
บทช่วยสอนนี้จะอธิบายวิธีแก้ไขข้อผิดพลาดนี้ในทางปฏิบัติ
วิธีการทำซ้ำข้อผิดพลาด
สมมติว่าเราสร้างเมทริกซ์ต่อไปนี้โดยใช้ NumPy:
import numpy as np
#create 2x2 matrix
my_matrix = np. array ([[1., 1.], [1., 1.]])
#display matrix
print (my_matrix)
[[1. 1.]
[1. 1.]]
ตอนนี้ สมมติว่าเราลองใช้ฟังก์ชัน inv() ของ NumPy เพื่อคำนวณค่าผกผันของเมทริกซ์:
from numpy import inv
#attempt to invert matrix
inv(my_matrix)
numpy.linalg.LinAlgError: Singular matrix
เราได้รับข้อผิดพลาดเนื่องจากเมทริกซ์ที่เราสร้างไม่มีเมทริกซ์ผกผัน
หมายเหตุ : ลองดู หน้านี้ จาก Wolfram MathWorld ซึ่งแสดงตัวอย่างเมทริกซ์ที่แตกต่างกัน 10 ตัวอย่างที่ไม่มีเมทริกซ์ผกผัน
ตามคำจำกัดความ เมทริกซ์จะเป็นเอกพจน์และไม่สามารถกลับด้านได้หากมีดีเทอร์มิแนนต์เป็นศูนย์
คุณสามารถใช้ฟังก์ชัน det() ของ NumPy เพื่อคำนวณดีเทอร์มิแนนต์ของเมทริกซ์ที่กำหนดก่อนที่จะพยายามกลับด้าน:
from numpy import det
#calculate determinant of matrix
det(my_matrix)
0.0
ดีเทอร์มิแนนต์ของเมทริกซ์ของเราคือศูนย์ ซึ่งอธิบายว่าทำไมเราถึงพบข้อผิดพลาด
วิธีการแก้ไขข้อผิดพลาด
วิธีเดียวที่จะแก้ไขข้อผิดพลาดนี้คือเพียงสร้างเมทริกซ์ที่ไม่ใช่เอกพจน์
ตัวอย่างเช่น สมมติว่าเราใช้ฟังก์ชัน inv() เพื่อกลับเมทริกซ์ต่อไปนี้:
import numpy as np
from numpy. linalg import inv, det
#create 2x2 matrix that is not singular
my_matrix = np. array ([[1., 7.], [4., 2.]])
#display matrix
print (my_matrix)
[[1. 7.]
[4. 2.]]
#calculate determinant of matrix
print (det(my_matrix))
-25.9999999993
#calculate inverse of matrix
print (inv(my_matrix))
[[-0.07692308 0.26923077]
[0.15384615 -0.03846154]]
เราไม่ได้รับข้อผิดพลาดใดๆ เมื่อกลับเมทริกซ์เนื่องจากเมทริกซ์ไม่ใช่เอกพจน์
แหล่งข้อมูลเพิ่มเติม
บทช่วยสอนต่อไปนี้จะอธิบายวิธีแก้ไขข้อผิดพลาดทั่วไปอื่นๆ ใน Python:
วิธีแก้ไข: ไม่สามารถเรียกวัตถุ ‘numpy.float64’ ได้
วิธีแก้ไข: ไม่สามารถเรียกวัตถุ ‘numpy.ndarray’ ได้
วิธีแก้ไข: ไม่สามารถตีความวัตถุ ‘numpy.float64’ เป็นจำนวนเต็มได้