NumPy: الجبر الخطي

آخر تحديث: 2026-08-26

1. ما ستتعلمه




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.dot و p.matmul؟
ج للمصفوفات ثنائية الأبعاد، هي متطابقة. للأبعاد الأعلى، @ و p.matmul يستخدمان البث (ضرب مصفوفات مكدسة)، بينما p.dot يستخدم مجموع-الضرب على آخر محور لكل منها.
س متى يجب استخدام solve مقابل inv؟
ج استخدم solve دائماً — إنه أسرع وأكثر استقراراً عددياً. حساب inv(A) @ b أبطأ وأقل دقة من solve(A, b).
س ماذا إذا كانت A مفردة؟
ج p.linalg.solve يثير LinAlgError: Singular matrix. استخدم p.linalg.lstsq لحلول المربعات الصغرى للأنظمة غير المحددة/فوق المحددة.


❓ أسئلة شائعة

س ما هو أهم شيء يجب تذكره؟
ج عمليات NumPy مُتجهة — تجنب حلقات Python للحصول على أداء أفضل.
س أين يمكنني معرفة المزيد؟
ج تحقق من وثائق NumPy الرسمية على numpy.org للمراجع التفصيلية والمواضيع المتقدمة.
س هل هذا يعمل مع NumPy 2.x؟
ج نعم — جميع الأمثلة متوافقة مع NumPy 2.x. بعض واجهات API القديمة (مثل np.random.seed) لا تزال مدعومة لكن البدائل الحديثة موصى بها.

📖 ملخص

p.linalg.inv: معكوس المصفوفة؛ p.linalg.det: المحدد

p.linalg.eig: القيم الذاتية والمتجهات الذاتية

p.linalg.solve: حل الأنظمة الخطية

p.linalg.qr، p.linalg.svd، p.linalg.cholesky: التفكيكات



📝 تمارين

  1. مبتدئ (الصعوبة ⭐): أنشئ مصفوفتين 3x3 من أعداد صحيحة عشوائية. احسب حاصل ضربهما ومحددهما ومعكوسهما. تحقق من أن A @ inv(A) ≈ مصفوفة محايدة.

  2. متوسط (الصعوبة ⭐⭐): حل النظام: 3x + y = 9، x + 2y = 8 باستخدام p.linalg.solve. تحقق من صحة الحل.

  3. متقدم (الصعوبة ⭐⭐⭐): ولّد مصفوفة عشوائية 5x5، احسب قيمها الذاتية ومتجهاتها الذاتية. تحقق من أن A @ v = λ * v لكل زوج ذاتي.

Web-Tutorial.com

فريق Web-Tutorial التقني

منصة دروس برمجية يديرها عدة مطورين. كل درس يتم كتابته ومراجعته بواسطة مطورين متخصصين في المجال. نعمل على ضمان دقة وموثوقية المحتوى — إذا لاحظت أي مشكلة، فيرجى إخبارنا.

100%