我正在将我的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 (*) ]
中的等价形式是什么
3条答案
按热度按时间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()
等效为.*
5lhxktic2#
在np.multiply()中,两个数组的列数应该相同:
字符串
其中,在np.dot()中,第一个矩阵中的列数=第二个矩阵中的行数
型
3phpmpom3#
这个答案(https://stackoverflow.com/a/68085301/23173978)是不正确的。
它应该是:
字符串
np.multiply
是元素乘法,你乘以相应的分量,但不通过求和来聚合。所以输出应该与输入l
相同的形状。型
np.dot
是点积,你乘以相应的分量,然后把这些乘积加在一起。输出的形状改变了,因为l
的形状是(3,2)点乘a
的形状是(2,1)将给予我们形状是(3,1)的输出。