NumPy: الجبر الخطي
آخر تحديث: 2026-08-26
1. ما ستتعلمه
- ❶ ضرب المصفوفات: @، p.dot، p.matmul
- ❷ المعكوس والمحدد: p.linalg.inv، p.linalg.det
- ❸ القيم الذاتية والمتجهات الذاتية: p.linalg.eig
- ❹ حل الأنظمة الخطية: p.linalg.solve
- ❺ تفكيك المصفوفات: QR، SVD، Cholesky
2. قصة
يحتاج بوب إلى حل نظام من 1000 معادلة خطية. يكتب حلقة حذف غاوسي — 30 ثانية وتنفيذ مليء بالأخطاء. أليس تستخدم p.linalg.solve(A, b) — 0.01 ثانية، نتيجة دقيقة. "الجبر الخطي في NumPy ليس أسرع فحسب — إنه يستدعي BLAS/LAPACK، نفس المكتبات التي يستخدمها MATLAB و R. مُختبرة لعدة عقود."
3. المفاهيم الأساسية
(1) ضرب المصفوفات
`python import numpy as np
A = np.مصفوفة([[1, 2], [3, 4]]) B = np.مصفوفة([[5, 6], [7, 8]])
ثلاث طرق مكافئة:
print(A @ B) # [[19 22] # [43 50]] print(np.dot(A, B)) # نفس الشيء print(np.matmul(A, B)) # نفس الشيء `
` ext
المخرجات: قم بتشغيل NumPy 2.x في بيئة Python المحلية لديك لرؤية مخرجات ndarray. خادم Piston لا يحتوي على NumPy مثبت مسبقاً — قم بتثبيته محلياً (pip install numpy) وقارن. قد تختلف القيم الفعلية حسب إصدار NumPy والبذرة العشوائية. `
(2) المعكوس والمحدد
`python import numpy as np
A = np.مصفوفة([[1, 2], [3, 4]])
det = np.linalg.det(A) # -2.000 inv = np.linalg.inv(A) # [[-2. 1. ] # [ 1.5 -0.5]] print(A @ inv) # [[1. 0.] # [0. 1.]] (محايدة) `
` ext
المخرجات: قم بتشغيل NumPy 2.x في بيئة Python المحلية لديك لرؤية مخرجات ndarray. خادم Piston لا يحتوي على NumPy مثبت مسبقاً — قم بتثبيته محلياً (pip install numpy) وقارن. قد تختلف القيم الفعلية حسب إصدار NumPy والبذرة العشوائية. `
(3) حل الأنظمة الخطية
`python
4. حل Ax = b
A = np.مصفوفة([[3, 1], [1, 2]]) b = np.مصفوفة([9, 8])
x = np.linalg.solve(A, b) print(x) # [2. 3.] print(A @ x) # [9. 8.] — تحقق `
` ext
المخرجات: قم بتشغيل NumPy 2.x في بيئة Python المحلية لديك لرؤية مخرجات ndarray. خادم Piston لا يحتوي على NumPy مثبت مسبقاً — قم بتثبيته محلياً (pip install numpy) وقارن. قد تختلف القيم الفعلية حسب إصدار NumPy والبذرة العشوائية. `
▶ مثال: ضرب المصفوفات (الصعوبة ⭐)
`python import numpy as np
A = np.مصفوفة([[1, 2, 3], [4, 5, 6]]) B = np.مصفوفة([[7, 8], [9, 10], [11, 12]])
5. ضرب مصفوفات: (2x3) @ (3x2) = (2x2)
C = A @ B print("A @ B:\n", C)
6. الضرب النقطي للمتجهات
x = np.مصفوفة([1, 2, 3]) y = np.مصفوفة([4, 5, 6]) print("dot(x, y):", np.dot(x, y)) `
المخرجات:
ext A @ B: [[ 58 64] [139 154]] dot(x, y): 32
▶ مثال: حل الأنظمة الخطية (الصعوبة ⭐⭐)
`python import numpy as np
7. حل: 3x + y = 9, x + 2y = 8
A = np.مصفوفة([[3, 1], [1, 2]]) b = np.مصفوفة([9, 8])
x = np.linalg.solve(A, b) print("Solution:", x)
8. تحقق
print("A @ x =", A @ x) print("b =", b) `
المخرجات:
ext Solution: [2. 3.] A @ x = [9. 8.] b = [9. 8.]
▶ مثال: القيم الذاتية والمتجهات الذاتية (الصعوبة ⭐⭐)
`python import numpy as np
A = np.مصفوفة([[4, -2], [1, 1]])
eigenvalues, eigenvectors = np.linalg.eig(A) print("Eigenvalues:", eigenvalues)
9. تحقق: A @ v = λ * v
v = eigenvectors[:, 0] lam = eigenvalues[0] lhs = A @ v rhs = lam * v print("A @ v:", lhs) print("λ * v:", rhs) print("Match:", np.allclose(lhs, rhs)) `
المخرجات:
ext Eigenvalues: [3. 2.] A @ v: [0.89442719 0.4472136 ] λ * v: [0.89442719 0.4472136 ] Match: True
❓ أسئلة شائعة
📖 ملخص
- @ / p.matmul / p.dot: ضرب المصفوفات
p.linalg.inv: معكوس المصفوفة؛ p.linalg.det: المحدد
p.linalg.eig: القيم الذاتية والمتجهات الذاتية
p.linalg.solve: حل الأنظمة الخطية
p.linalg.qr، p.linalg.svd، p.linalg.cholesky: التفكيكات
- استخدم solve بدلاً من inv @ b للسرعة والاستقرار
📝 تمارين
-
مبتدئ (الصعوبة ⭐): أنشئ مصفوفتين 3x3 من أعداد صحيحة عشوائية. احسب حاصل ضربهما ومحددهما ومعكوسهما. تحقق من أن A @ inv(A) ≈ مصفوفة محايدة.
-
متوسط (الصعوبة ⭐⭐): حل النظام: 3x + y = 9، x + 2y = 8 باستخدام p.linalg.solve. تحقق من صحة الحل.
-
متقدم (الصعوبة ⭐⭐⭐): ولّد مصفوفة عشوائية 5x5، احسب قيمها الذاتية ومتجهاتها الذاتية. تحقق من أن A @ v = λ * v لكل زوج ذاتي.