วิธีแก้ไข: 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’ เป็นจำนวนเต็มได้

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

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