Python 如何在numpy中获得元素矩阵乘法(Hadamard乘积)?
我有两个矩阵Python 如何在numpy中获得元素矩阵乘法(Hadamard乘积)?,python,numpy,matrix,matrix-multiplication,elementwise-operations,Python,Numpy,Matrix,Matrix Multiplication,Elementwise Operations,我有两个矩阵 a = np.matrix([[1,2], [3,4]]) b = np.matrix([[5,6], [7,8]]) 我想得到元素的乘积,[[1*5,2*6],[3*7,4*8],等于 [[5,12],[21,32] 我试过了 print(np.dot(a,b)) 及 但两者都给出了结果 [[19 22],[43 50] 这是矩阵积,不是元素积。如何使用内置函数获取元素级产品(又称Hadamard产品)?只需执行以下操作: import numpy as np a = n
a = np.matrix([[1,2], [3,4]])
b = np.matrix([[5,6], [7,8]])
我想得到元素的乘积,[[1*5,2*6],[3*7,4*8]
,等于
[[5,12],[21,32]
我试过了
print(np.dot(a,b))
及
但两者都给出了结果
[[19 22],[43 50]
这是矩阵积,不是元素积。如何使用内置函数获取元素级产品(又称Hadamard产品)?只需执行以下操作:
import numpy as np
a = np.array([[1,2],[3,4]])
b = np.array([[5,6],[7,8]])
a * b
对于
矩阵
对象的元素乘法,可以使用:
结果
array([[ 5, 12],
[21, 32]])
但是,您应该真正使用数组
,而不是矩阵
<代码>矩阵对象与常规数组有各种可怕的不兼容性。使用Ndarray,您只需使用*
进行元素乘法:
a * b
如果您使用的是Python 3.5+,您甚至不会失去使用运算符执行矩阵乘法的能力,因为:
np.multiply
和*
都会产生称为哈达玛积的元素级乘法
%timeit
是ipython magic试试这个:
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)
这里,np.array(a)
返回类型为ndarray
的2D数组,两个ndarray
相乘将导致元素相乘。因此,结果将是:
result = [[5, 12], [21, 32]]
如果你想得到一个矩阵,你可以这样做:
result = np.mat(result)
你确定
a
和b
不是NumPy的矩阵类型吗?对于此类,*
返回内积,而不是元素。但是对于通常的ndarray
类,*
表示元素级产品。a
和b
是numpy数组吗?另外,在您上面的问题中,您正在使用x
和y
进行计算,而不是a
和b
。这只是一个输入错误吗?a和b是numpy矩阵类型的元素通常使用numpy数组,而不是numpy矩阵。看看这个。还请注意,在python 3.5+中,您可以与numpy数组一起使用,这意味着绝对没有理由在数组上使用矩阵。他们将在np.dot中工作;但不在a*b
中。如果使用np.array(a)
或np.matrix(a)
,*
工作,但结果不同。nop,它给出矩阵乘法。云计算使用numpy.multiply解决它您使用的是哪个版本的Python和哪个版本的Python?numpy呢?使用Intel Python 3.5.2和numpy 1.12.1,*
运算符似乎可以执行元素乘法。这对我来说也适用于Python 3.5.2(使用gcc构建)上的numpy 1.12.1。@Malintha,我认为你在做a=np.*matrix**([[1,2],[3,4]]),而不仅仅是为了添加一点上下文:在代数中,这种运算称为哈达玛积,它不同于更常见的矩阵积。请解释一下它的作用。@LeopoldJoy我刚刚编辑了我的答案,希望这有帮助:))
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
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)
result = [[5, 12], [21, 32]]
result = np.mat(result)