计算列的所有排列的函数

Ali*_*Gul 3 matlab matrix

我有这个代码:

abs(mean(exp(1i*( a(:,1) - a(:,2) ))))
Run Code Online (Sandbox Code Playgroud)

其中a550 -by- 129双矩阵.我如何使用代码来代替编写代码a(:,1)a(:,2)a(:,3)等等,因为我需要每个列每隔一列中减去?

rah*_*ma1 6

另一种使用矩阵乘法的方法:

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)

是比较不同方法的代码.