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