我正在分析一些matlab代码,发现我的执行时间主要是调用dot
。在分析器中显示的功能列表中,我注意到以下注释行:
当A和B都是列向量时,DOT(A,B)与A' * B相同。
最初我的代码在大约22秒内运行,在dot
的140976次调用中花费了17.5秒。我将代码更改为使用'*
代替dot
,总运行时间降至 14秒!这个运算符显然比获取短列向量的点积的函数调用快得多
我的问题:'*
运算符究竟是什么,是否有文档记录(源代码除外)以及它可以/应该用于什么?
记录:我使用的是Matlab vintage R2010b。
答案 0 :(得分:3)
没有'*
运算符,它是顺序调用的两个运算符。首先'
即转置然后*
即矩阵乘法。
如果A
和B
都是列向量,那么通过将A
转置为行向量,两者的矩阵乘积相当于点积,即两个相应元素的所有产品
答案 1 :(得分:1)
您确定获得了相同的结果吗?因为点函数在相同维度的两个向量之间执行点积,而'*执行矩阵乘积。实施例
A=[1 1 1];
B=[2 2 2];
A'*B = 2 2 2
2 2 2
2 2 2
而
dot(A,B)= 6
我认为你正在考虑A * B',它等于你的向量是行向量的情况下的点积。
如果您的向量是列向量,请使用'*。 为了总结你需要你的矢量以行*列的形式,如果你想要一个点积。 (使用点功能时无需考虑)。