In numpy, I have two “arrays”, `X`

is `(m,n)`

and `y`

is a vector `(n,1)`

using

```
X*y
```

I am getting the error

```
ValueError: operands could not be broadcast together with shapes (97,2) (2,1)
```

When `(97,2)x(2,1)`

is clearly a legal matrix operation and should give me a `(97,1)`

vector

EDIT:

I have corrected this using `X.dot(y)`

but the original question still remains.

`dot`

is matrix multiplication, but`*`

does something else.We have two arrays:

`X`

, shape (97,2)`y`

, shape (2,1)With Numpy arrays, the operation

is done element-wise, but one or both of the values can be expanded in one or more dimensions to make them compatible. This operation is called broadcasting. Dimensions, where size is 1 or which are missing, can be used in broadcasting.

In the example above the dimensions are incompatible, because:

Here there are conflicting numbers in the first dimension (97 and 2). That is what the ValueError above is complaining about. The second dimension would be ok, as number 1 does not conflict with anything.

For more information on broadcasting rules: http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html

(Please note that if

`X`

and`y`

are of type`numpy.matrix`

, then asterisk can be used as matrix multiplication. My recommendation is to keep away from`numpy.matrix`

, it tends to complicate more than simplifying things.)Your arrays should be fine with

`numpy.dot`

; if you get an error on`numpy.dot`

, you must have some other bug. If the shapes are wrong for`numpy.dot`

, you get a different exception:If you still get this error, please post a minimal example of the problem. An example multiplication with arrays shaped like yours succeeds: