doté a multiplicação da matriz, mas *faz outra coisa.
Temos duas matrizes:
X, forma (97,2)
y, forma (2,1)
Com matrizes Numpy, a operação
X * y
é feito elemento a elemento, mas um ou ambos os valores podem ser expandidos em uma ou mais dimensões para torná-los compatíveis. Essa operação é chamada de transmissão. Dimensões em que o tamanho é 1 ou que estão faltando podem ser usadas na transmissão.
No exemplo acima, as dimensões são incompatíveis porque:
97 2
2 1
Aqui, há números conflitantes na primeira dimensão (97 e 2). É disso que o ValueError acima está reclamando. A segunda dimensão estaria ok, já que o número 1 não entra em conflito com nada.
Para obter mais informações sobre regras de transmissão: http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html
(Por favor, note que se Xe yforem do tipo numpy.matrix, então o asterisco pode ser usado como multiplicação da matriz. Minha recomendação é ficar longe numpy.matrix, isso tende a complicar mais do que simplificar as coisas.)
Seus arrays devem estar bem com numpy.dot; se obtiver um erro em numpy.dot, você deve ter algum outro bug. Se as formas forem erradas numpy.dot, você receberá uma exceção diferente:
ValueError: matrices are not aligned
Se você ainda receber esse erro, poste um exemplo mínimo do problema. Um exemplo de multiplicação com matrizes no formato da sua é bem-sucedido:
In [1]: import numpy
In [2]: numpy.dot(numpy.ones([97, 2]), numpy.ones([2, 1])).shape
Out[2]: (97, 1)
X*ynão deveria funcionar (e não funciona), masnp.dot(X,y)eX.dot(y))deveria funcionar (e para mim funcionam).