numpy np.dot()和np.multiply的区别

k3fezbri  于 11个月前  发布在  其他
关注(0)|答案(3)|浏览(117)

我正在将我的matlab函数转换为python。我想用python重写这个简单的函数

function [ H ] = update_H( X , W , H )

     H = H.*((W'*X)./secu_plus(W'*W*H,eps));

end

function [ W ] = update_W( X , W , H )

     W = W.*((X*H')./secu_plus(W*(H*H'),eps));

end

字符串
注意:secu_plus是另一个函数,所以忽略。
正如你所看到的,有两种乘法*.*,还有./
python [(.* ) (./ ) and (*) ]中的等价形式是什么

jvidinwx

jvidinwx1#

Matlap 中,.operation 表示元素操作,例如,如果array1 = [1,2,3]和array3 [1,2,1],则.*将是[1,4,3]。
np.dot是两个向量之间的点积,点积数学上是两个向量的乘积乘以余弦之间的Angular 的值,在二维坐标中它等价于X1 * X2 + Y1 * Y2作为一般形式A.B = sum ai*bi
因此只需将np.multiply()等效为.*

5lhxktic

5lhxktic2#

在np.multiply()中,两个数组的列数应该相同:

l = np.array([[1,2],[4,5],[7,8]])
a = np.array([[2,3]]
np.multiply(l,a)
output:
array([[ 8],
       [23],
       [38]])

字符串
其中,在np.dot()中,第一个矩阵中的列数=第二个矩阵中的行数

l = np.array([[1,2],[4,5],[7,8]])
a = np.array([[2,3]]).reshape(2,1)
np.dot(l,a)
output
array([[ 2,  6],
       [ 8, 15],
       [14, 24]])

3phpmpom

3phpmpom3#

这个答案(https://stackoverflow.com/a/68085301/23173978)是不正确的。
它应该是:

l = np.array([[1,2],[4,5],[7,8]])
a = np.array([[2,3]])
np.multiply(l,a)

output:
array([[ 2,  6],
       [ 8, 15],
       [14, 24]])

字符串
np.multiply是元素乘法,你乘以相应的分量,但不通过求和来聚合。所以输出应该与输入l相同的形状。

l = np.array([[1,2],[4,5],[7,8]])
a = np.array([[2,3]]).reshape(2,1)
np.dot(l,a)

output:
array([[ 8],
       [23],
       [38]])


np.dot是点积,你乘以相应的分量,然后把这些乘积加在一起。输出的形状改变了,因为l的形状是(3,2)点乘a的形状是(2,1)将给予我们形状是(3,1)的输出。

相关问题