Как исправить: 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 в целое число