Skip to content
Advertisement

Python Element-wise Multiplication

In MATLAB, I do a calculation using

repmat(A-B,100,1).*rand(100,length(B))

Here, A and B are 1*19-sized matrices.

To execute the same code in Python, I am using the following code-

np.matmul(np.matlib.repmat(A - B, 100, 1), np.matlib.rand(100, len(B)))

Upon running the code, I get the following error-

ValueError: matmul: 
  Input operand 1 has a mismatch in its core dimension 0, 
  with gufunc signature (n?,k),(k,m?)->(n?,m?) 
  (size 100 is different from 19)

What should I do?

Advertisement

Answer

MATLAB’s .* is a broadcasting operator. It scalar-extends the * operator to apply to matrices of matching size pointwise. This is not matrix multiplication, which is a different operation available on matrices that requires the middle two dimensions to match.

The equivalent of .* in Python, assuming the left-hand and right-hand side are numpy arrays, is simply *.

np.matlib.repmat(A - B, 100, 1) * np.matlib.rand(100, len(B))

If the left-hand and right-hand side are not numpy arrays (for instance, if they’re ordinary Python lists), then you can convert them by calling numpy.array on them beforehand

User contributions licensed under: CC BY-SA
3 People found this is helpful
Advertisement