English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
في هذا المثال، سنتعلم كيفية تعويض مصفوفتين باستخدام طريقتين مختلفتين: الدورات المزدوجة والفهم العميق
لفهم هذا المثال، يجب أن تكون على علم بما يليبرمجة بايثونالموضوع:
في بايثون، يمكننا تحقيق المصفوفة كقائمة من القوائم (قائمة داخل قائمة).
يمكننا اعتبار كل عنصر كخط في المصفوفة.
على سبيل المثال، X = [[1, 2], [4, 5], [3, 6]] يمثل مصفوفة حجمها 3x2.
يمكن اختيار السطر الأول كـ X[0]. ويمكن اختيار العنصر الأول في السطر الأول والعمود الأول كـ X[0][0].
تعريف ضرب المصفوفتين X و Y يتم فقط عندما يكون عدد الأعمدة في X يساوي عدد الصفوف في Y.
إذا كان X مصفوفة حجمها n x m، و Y مصفوفة حجمها m x l، فإن XY معرف، حجمها n x l (لكن YX غير معرف). إليك بعض الطرق لتحقيق تعويض المصفوفات في بايثون.
# برنامج يستخدم الدورات المزدوجة لتوليد تعويض مصفوفتين # مصفوفة 3x3 X = [[12,7,3], [4 ,5,6], [7 ,8,9]] # مصفوفة 3x4 Y = [[5,8,1,2], [6,7,3,0], [4,5,9,1]] # النتيجة 3x4 result = [[0,0,0,0], [0,0,0,0], [0,0,0,0]] # مرور عبر صفوف X لـ i في نطاق طول X: # مرور عبر أعمدة Y لـ j في نطاق طول Y[0]: # مرور عبر صفوف Y لـ k في نطاق طول Y: result[i][j] += X[i][k] * Y[k][j] لـ r في result: print(r)
نتيجة الخروج
[114, 160, 60, 27] [74, 97, 73, 14] [119, 157, 112, 23]
في هذا البرنامج، نستخدم حلقة for المدمجة لتتبع كل سطر وعمود. نضيف مجموع المنتجات في النتيجة.
هذه التقنية بسيطة، ولكن مع زيادة رتبة المصفوفة، يزداد حجم الحسابات.
للمعاملات المصفوفة الكبيرة، نوصي باستخدام حزمة معززة مثلNumPy، وهو أسرع بمرات عديدة مما ذكرنا أعلاه (حوالي 1000 مرة).
# برنامج ضرب مصفوفتين باستخدام فهم القوائم المدمجة # مصفوفة 3x3 X = [[12,7,3], [4 ,5,6], [7 ,8,9]] # مصفوفة 3x4 Y = [[5,8,1,2], [6,7,3,0], [4,5,9,1]] # النتيجة 3x4 result = [[sum(a*b for a, b in zip(X_row, Y_col)) for Y_col in zip(*Y)] for X_row in X] لـ r في result: print(r)
خروج البرنامج هو نفسه في الأعلى. لفهم الكود في الأعلى، يجب علينا أولاً أن نفهم وظيفة الدالة المدمجة zip() واستخدام عمليات الحساب * لفك تشفير قائمة الأنواع.
خروج البرنامج هو نفسه في الأعلى. لفهم الكود في الأعلى، يجب علينا أولاً أن نفهم وظيفة الدالة المدمجة zip() واستخدام عمليات الحساب * لفك تشفير قائمة الأنواع.