I have two matrices
a = np.matrix([[1,2], [3,4]]) b = np.matrix([[5,6], [7,8]])
and I want to get the element-wise product, [[1*5,2*6], [3*7,4*8]], equaling
[[5,12], [21,32]]
I have tried
print(np.dot(a,b))
and
print(a*b)
but both give the result
[[19 22], [43 50]]
which is the matrix product, not the element-wise product. How can I get the the element-wise product (aka Hadamard product) using built-in functions?
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
For elementwise multiplication of matrix objects, you can use numpy.multiply:
import numpy as np a = np.array([[1,2],[3,4]]) b = np.array([[5,6],[7,8]]) np.multiply(a,b)
Result
array([[ 5, 12],
[21, 32]])
However, you should really use array instead of matrix. matrix objects have all sorts of horrible incompatibilities with regular ndarrays. With ndarrays, you can just use * for elementwise multiplication:
a * b
If you’re on Python 3.5+, you don’t even lose the ability to perform matrix multiplication with an operator, because @ does matrix multiplication now:
a @ b # matrix multiplication
Method 2
just do this:
import numpy as np a = np.array([[1,2],[3,4]]) b = np.array([[5,6],[7,8]]) a * b
Method 3
import numpy as np
x = np.array([[1,2,3], [4,5,6]])
y = np.array([[-1, 2, 0], [-2, 5, 1]])
x*y
Out:
array([[-1, 4, 0],
[-8, 25, 6]])
%timeit x*y
1000000 loops, best of 3: 421 ns per loop
np.multiply(x,y)
Out:
array([[-1, 4, 0],
[-8, 25, 6]])
%timeit np.multiply(x, y)
1000000 loops, best of 3: 457 ns per loop
Both np.multiply and * would yield element wise multiplication known as the Hadamard Product
%timeit is ipython magic
Method 4
Try this:
a = np.matrix([[1,2], [3,4]]) b = np.matrix([[5,6], [7,8]]) #This would result a 'numpy.ndarray' result = np.array(a) * np.array(b)
Here, np.array(a) returns a 2D array of type ndarray and multiplication of two ndarray would result element wise multiplication. So the result would be:
result = [[5, 12], [21, 32]]
If you wanna get a matrix, the do it with this:
result = np.mat(result)
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0