Як виправити: valueerror: операнди не можна транслювати з фігурами
Під час використання Python може виникнути така помилка:
ValueError : operands could not be broadcast together with shapes (2,2) (2,3)
Ця помилка виникає, коли ви намагаєтеся виконати множення матриці за допомогою знака множення ( * ) у Python замість функції numpy.dot() .
У наведених нижче прикладах показано, як виправити цю помилку в кожному сценарії.
Як відтворити помилку
Припустимо, що у нас є матриця 2×2 C, яка має 2 рядки та 2 стовпці:

Припустимо, що ми також маємо матрицю 2×3 D, яка має 2 рядки та 3 стовпці:

Ось як помножити матрицю C на матрицю D:

Це призводить до такої матриці:

Припустімо, ми спробуємо виконати це множення матриці в Python за допомогою знака множення (*) наступним чином:
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: Operands could not be broadcast together , яка вказує на те, що масиви мають несумісні форми.
Оскільки наші дві матриці не мають однакового значення для своїх кінцевих розмірів (матриця 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]])
Зверніть увагу, що ми уникаємо ValueError і успішно перемножуємо обидві матриці.
Також зауважте, що результати збігаються з результатами, обчисленими раніше вручну.
Додаткові ресурси
У наступних посібниках пояснюється, як виправити інші типові помилки в Python:
Як виправити: стовпці перекриваються, але суфікс не вказано
Як виправити: об’єкт «numpy.ndarray» не має атрибута «додавання».
Як виправити: якщо ви використовуєте всі скалярні значення, вам потрібно передати індекс
Як виправити: ValueError: неможливо перетворити float NaN на int