dot
є матричним множенням, але *
робить щось інше.
У нас є два масиви:
X
, форма (97,2)
y
, форма (2,1)
З Numpy масивами - операція
X * y
робиться елементарно, але одне або обидва значення можуть бути розширені в одному або декількох вимірах, щоб зробити їх сумісними. Ця операція називається мовленням. Розміри, де розмір становить 1 або відсутні, можуть використовуватися для мовлення.
У наведеному вище прикладі розміри несумісні, оскільки:
97 2
2 1
Тут є суперечливі числа в першому вимірі (97 і 2). Саме на це скаржиться ValueError, наведений вище. Другий вимір був би нормальним, оскільки число 1 ні з чим не суперечить.
Для отримання додаткової інформації про правила мовлення: http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html
(Зверніть увагу, що якщо X
і y
є тип numpy.matrix
, то зірочка може використовуватися як множення матриць. Моя рекомендація - не слідкувати відnumpy.matrix
, воно, як правило, ускладнює більше, ніж спрощує речі.)
Ваші масиви повинні бути добре з numpy.dot
; якщо ви отримаєте помилку numpy.dot
, ви повинні мати якусь іншу помилку. Якщо фігури неправильні numpy.dot
, ви отримуєте інший виняток:
ValueError: matrices are not aligned
Якщо ви все-таки отримаєте цю помилку, будь ласка, опублікуйте мінімальний приклад проблеми. Приклад множення на масиви, схожі на ваші:
In [1]: import numpy
In [2]: numpy.dot(numpy.ones([97, 2]), numpy.ones([2, 1])).shape
Out[2]: (97, 1)
X*y
не повинні працювати (і це не робить), алеnp.dot(X,y)
іX.dot(y))
повинні працювати (і для мене вони роблять).