Как исправить: valueerror: операнды не могут быть переданы с помощью фигур.
Ошибка, с которой вы можете столкнуться при использовании Python:
ValueError : operands could not be broadcast together with shapes (2,2) (2,3)
Эта ошибка возникает, когда вы пытаетесь выполнить умножение матрицы, используя знак умножения ( * ) в Python вместо функции numpy.dot() .
В следующих примерах показано, как исправить эту ошибку в каждом сценарии.
Как воспроизвести ошибку
Предположим, у нас есть матрица C размером 2×2, имеющая 2 строки и 2 столбца:
Предположим, у нас также есть матрица D размером 2×3, имеющая 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» не имеет атрибута «append»
Как исправить: если вы используете все скалярные значения, вам необходимо передать индекс.
Как исправить: ValueError: невозможно преобразовать число с плавающей запятой NaN в int.