Как исправить: ValueError: операнды не могли транслироваться вместе с фигурами

Как исправить: ValueError: операнды не могли транслироваться вместе с фигурами

Одна ошибка, с которой вы можете столкнуться при использовании Python:

ValueError : operands could not be broadcast together with shapes (2,2) (2,3)

Эта ошибка возникает, когда вы пытаетесь выполнить умножение матриц, используя знак умножения ( * ) в Python вместо функции numpy.dot() .

В следующих примерах показано, как исправить эту ошибку в каждом сценарии.

Как воспроизвести ошибку

Предположим, у нас есть матрица C 2 × 2, которая имеет 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 matrices
print(C)

[[7 5]
 [6 3]]

print(D)

[[2 1 4]
 [5 1 2]]

#attempt to multiply two matrices together
C\*D

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. dot (D)

array([[39, 12, 38],
 [27, 9, 30]])

Обратите внимание, что мы избегаем ошибки ValueError и можем успешно перемножить две матрицы.

Также обратите внимание, что результаты совпадают с результатами, которые мы рассчитали вручную ранее.

Дополнительные ресурсы

В следующих руководствах объясняется, как исправить другие распространенные ошибки в Python:

Как исправить: столбцы перекрываются, но суффикс не указан
Как исправить: объект «numpy.ndarray» не имеет атрибута «добавлять»
Как исправить: при использовании всех скалярных значений необходимо передать индекс
Как исправить: ValueError: невозможно преобразовать число с плавающей запятой NaN в целое число

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.