Ошибка значения Numpy .dot()

#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 утверждает, что две матрицы являются «входными данными» и «весами».