كيفية الإصلاح: خطأ في القيمة: لا يمكن بث المعاملات بالأشكال
الخطأ الذي قد تواجهه عند استخدام بايثون هو:
ValueError : operands could not be broadcast together with shapes (2,2) (2,3)
يحدث هذا الخطأ عند محاولة إجراء ضرب المصفوفات باستخدام علامة الضرب ( * ) في لغة Python بدلاً من الدالة numpy.dot() .
توضح الأمثلة التالية كيفية تصحيح هذا الخطأ في كل سيناريو.
كيفية إعادة إنتاج الخطأ
لنفترض أن لدينا مصفوفة 2×2 C، والتي تحتوي على صفين وعمودين:
لنفترض أن لدينا أيضًا مصفوفة D 2×3، والتي تحتوي على صفين و3 أعمدة:
إليك كيفية ضرب المصفوفة C في المصفوفة D:
وينتج عن ذلك المصفوفة التالية:
لنفترض أننا نحاول إجراء ضرب المصفوفة في بايثون باستخدام علامة الضرب (*) كما يلي:
import numpy as np #define matrices C = np. array ([7, 5, 6, 3]). reshape (2, 2) D = np. array ([2, 1, 4, 5, 1, 2]). reshape (2, 3) #print dies print (C) [[7 5] [6 3]] print (D) [[2 1 4] [5 1 2]] #attempt to multiply two matrices together CD ValueError: operands could not be broadcast together with shapes (2,2) (2,3)
نتلقى خطأ ValueError . يمكننا الرجوع إلى وثائق NumPy لفهم سبب تلقينا هذا الخطأ:
عند العمل على صفيفين، يقوم NumPy بمقارنة أشكالهما عنصرًا بعنصر. يبدأ بالأبعاد النهائية (أي في أقصى اليمين) ويصل إلى اليسار. البعدان متوافقان عندما
- إنهما متساويان، أو
- واحد منهم هو 1
إذا لم يتم استيفاء هذه الشروط، فسيتم طرح خطأ ValueError: لا يمكن بث المعاملات معًا ، مما يشير إلى أن المصفوفات لها أشكال غير متوافقة.
نظرًا لأن المصفوفتين ليس لهما نفس القيمة لأبعادهما النهائية (المصفوفة C لها البعد النهائي 2 والمصفوفة D لها البعد النهائي 3)، فإننا نتلقى خطأ.
كيفية اصلاح الخطأ
أسهل طريقة لإصلاح هذا الخطأ هي ببساطة استخدام الدالة numpy.dot() لإجراء ضرب المصفوفة:
import numpy as np #define matrices C = np. array ([7, 5, 6, 3]). reshape (2, 2) D = np. array ([2, 1, 4, 5, 1, 2]). reshape (2, 3) #perform matrix multiplication C. dowry (D) array([[39, 12, 38], [27, 9, 30]])
لاحظ أننا نتجنب خطأ القيمة ونتمكن من ضرب المصفوفتين بنجاح.
لاحظ أيضًا أن النتائج تطابق النتائج التي حسبناها يدويًا سابقًا.
مصادر إضافية
تشرح البرامج التعليمية التالية كيفية إصلاح الأخطاء الشائعة الأخرى في بايثون:
كيفية الإصلاح: تتداخل الأعمدة ولكن لم يتم تحديد أي لاحقة
كيفية الإصلاح: لا يحتوي الكائن “numpy.ndarray” على سمة “إلحاق”.
كيفية الإصلاح: إذا كنت تستخدم جميع القيم العددية، فستحتاج إلى تمرير فهرس
كيفية الإصلاح: خطأ القيمة: غير قادر على تحويل float NaN إلى int