Вы ошибаетесь в форме массива, который вы передаете:
>>> W = np.array([[1], [2]])
>>> W.shape
(2, 1)
>>> W = np.array([1, 2])
>>> W.shape
(2,)
Как вы заметили, использование np.dot
во втором определении W
работает как ожидалось. Чтобы поставить точку на 2-й матрице, когда она не квадратная, вы должны транспонировать:
>>> W = np.array([[1], [2]])
>>> np.dot(W, W.transpose())
array([[1, 2],
[2, 4]])
Ярлык для transpose
- W.T
Обратите внимание, что форма вывода отличается в зависимости от того, начинаете ли вы с транспозиции или оригинала, как и следовало ожидать:
>>> np.dot(W.T, W)
array([[5]])
>>> np.dot(W.T, W).shape
(1, 1)
Подробнее смотрите в документах numpy .