Все мы знаем, что скалярное произведение между векторами должно возвращать скаляр:
import numpy as np
a = np.array([1,2,3])
b = np.array([3,4,5])
print(a.shape) # (3,)
print(b.shape) # (3,)
a.dot(b) # 26
b.dot(a) # 26
идеально. НО ПОЧЕМУ, если мы используем «настоящий» (см. Разница между numpy.array shape (R, 1) и (R,)) вектором-строкой или вектором-столбцом, точечный продукт numpy возвращает ошибку по измерению?
arow = np.array([[1,2,3]])
brow = np.array([[3,4,5]])
print(arow.shape) # (1,3)
print(brow.shape) # (1,3)
arow.dot(brow) # ERROR
brow.dot(arow) # ERROR
acol = np.array([[1,2,3]]).reshape(3,1)
bcol = np.array([[3,4,5]]).reshape(3,1)
print(acol.shape) # (3,1)
print(bcol.shape) # (3,1)
acol.dot(bcol) # ERROR
bcol.dot(acol) # ERROR
dot
, несмотря на название, является матричным продуктом. Документы поясняют, что обработка 1d-массивов - это особый случай. - person hpaulj   schedule 04.01.2019a
иb
не равны 1d,dot
это: произведение суммы по последней осиa
и предпоследней осиb
. (3,1) может работать с (1,3), но не с (3,1). - person hpaulj   schedule 05.01.2019