كيفية الإصلاح: numpy.linalg.linalgerror: المصفوفة المفردة
الخطأ الذي قد تواجهه في بايثون هو:
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]]
لا نتلقى أي أخطاء عند قلب المصفوفة لأن المصفوفة ليست مفردة.
مصادر إضافية
تشرح البرامج التعليمية التالية كيفية إصلاح الأخطاء الشائعة الأخرى في بايثون:
كيفية الإصلاح: الكائن “numpy.float64” غير قابل للاستدعاء
كيفية الإصلاح: الكائن “numpy.ndarray” غير قابل للاستدعاء
كيفية الإصلاح: لا يمكن تفسير الكائن “numpy.float64” على أنه عدد صحيح