我有这个代码:
abs(mean(exp(1i*( a(:,1) - a(:,2) ))))
Run Code Online (Sandbox Code Playgroud)
其中a是550 -by- 129双矩阵.我如何使用代码来代替编写代码a(:,1)与a(:,2)再a(:,3)等等,因为我需要每个列每隔一列中减去?
另一种使用矩阵乘法的方法:
E = exp(1i*a);
result = abs(E.'*(1./E)/size(E,1));
Run Code Online (Sandbox Code Playgroud)
说明:
你可以重写表达式
exp(1i*( a - b) ))
Run Code Online (Sandbox Code Playgroud)
如
exp(1i*a)/exp(1i*b)
Run Code Online (Sandbox Code Playgroud)
所以
exp(1i*a)*(1/exp(1i*b))
Run Code Online (Sandbox Code Playgroud)
并且mean(x)是sum(x)/n
使用它,您可以使用非常快速的矩阵乘法来完成任务.
Octave中不同方法之间的比较结果:
Matrix Multiplication:
Elapsed time is 0.0133181 seconds.
BSXFUN:
Elapsed time is 1.33882 seconds.
REPMAT:
Elapsed time is 1.43535 seconds.
FOR LOOP:
Elapsed time is 3.10798 seconds.
Run Code Online (Sandbox Code Playgroud)
这是比较不同方法的代码.