#python #numpy #linear-algebra #matrix-multiplication
#питон #тупица #линейная алгебра #матрица-умножение
Вопрос:
Я пытаюсь понять эту проблему. Моя входная матрица равна (60,4), а моя весовая матрица равна (4, 2). Умножение может быть легко выполнено (с математической точки зрения, итоговая матрица равна (60,2)). Но Numpy показывает ошибку, которую я не мог объяснить.
self.output = np.dot (inputs, self.weights) self.biases ValueError: operands could not be broadcast together with shapes (60,4) (4,2)
Комментарии:
1.
np.dot
не вызываетbroadcasting
ошибок. Я думаю,что у этого есть проблема. Расскажите нам о форме всех 3 массивов. Или протестируйте каждую деталь отдельно.
2.
dot
приводит к таким ошибкам, какValueError: shapes (4,2) and (4,4) not aligned: 2 (dim 1) != 4 (dim 0)
Ответ №1:
Убедитесь, что ваши входные данные являются матрицами, а не векторами. Один из способов сделать это -:
np.matrix(a) * np.matrix(b)
Но на самом деле вам это и не нужно. Существует множество альтернатив, которые достигают того же результата:
np.tensordot(a, b, 1)
Другой способ:
np.einsum('ij,jh', a, b)
Еще один:
np.matmul(a, b)
И победитель:
a @ b
Комментарии:
1.
np.dot
это точечный продукт. Это не то же самое, что умножение матрицы.2. Мы больше не рекомендуем использовать
np.matrix
. Почитайте документы.3. Я чувствую, что это должно быть для полноты и подчеркнуть, что нет никаких причин, по которым произвольные тензоры должны рассматриваться оператором умножения как матрицы, если только это не
matmul
4. Все это то же
np.dot(a,b)
самое, что и для 2d-массивов. Ошибка операции не была вызванаnp.dot
вызовом.5. Я согласен, что здесь что-то не так, но предубеждения не должны иметь форму (4,2), и OP утверждает, что две матрицы являются «входными данными» и «весами».