Как исправить: 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.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *