Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ValueError: matrices are not aligned

I have the following code:

dotp = np.dot(X[i], w)
mult = -Y[i] * dotp
lhs = Y[i] * X[i]
rhs = logistic(mult)
s += lhs * rhs

And it throws me the following error (truncated for brevity):

  File "/Users/leonsas/Projects/temp/learners/learners.py", line 26, in log_likelihood_grad
    s += lhs * rhs
  File "/usr/local/lib/python2.7/site-packages/numpy/matrixlib/defmatrix.py", line 341, in __mul__
    return N.dot(self, asmatrix(other))

 `ValueError: matrices are not aligned`

I was expecting lhs to be a column vector and rhs to be a scalar and so that operation should work. To debug, I printed out the dimensions:

    print "lhs", np.shape(lhs)
    print  "rhs", rhs, np.shape(rhs)

Which outputs:

lhs (1, 18209)
rhs [[ 0.5]] (1, 1)

So it seems that they are compatible for a multiplication. Any thoughts as to what am I doing wrong?

EDIT: More information of what I'm trying to do.

This code is to implement a log-likehood gradient to estimate coefficients.

enter image description here

Where z is the dot product of the weights with the x values.

My attempt at implementing this:

def log_likelihood_grad(X, Y, w, C=0.1):
    K = len(w)
    N = len(X)
    s = np.zeros(K)

    for i in range(N):
        dotp = np.dot(X[i], w)
        mult = -Y[i] * dotp
        lhs = Y[i] * X[i]
        rhs = logistic(mult)
        s += lhs * rhs

    s -= C * w

    return s
like image 908
leonsas Avatar asked Dec 16 '14 23:12

leonsas


2 Answers

You have a matrix lhs of shape (1, 18209) and rhs of shape (1, 1) and you are trying to multiply them. Since they're of matrix type (as it seems from the stack trace), the * operator translates to dot. Matrix product is defined only for the cases where the number of columns in the first matrix and the number of rows in the second one are equal, and in your case they're not (18209 and 1). Hence the error.

How to fix it: check the maths behind the code and fix the formula. Perhaps you forgot to transpose the first matrix or something like that.

like image 107
fjarri Avatar answered Oct 16 '22 18:10

fjarri


vectors' shape on numpy lib are like (3,). when you try to multiply them with np.dot(a,b) func it gives dim error. np.outer(a,b) func should be used at this point.

like image 37
guler Avatar answered Oct 16 '22 17:10

guler