Одна ошибка, с которой вы можете столкнуться при использовании 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 в целое число