我有两个向量 a 和 b 以及一些函数 f。在 MATLAB 中定义此类矩阵的最佳方法(性能)是什么:
A(m,n) = f(a(m)*b(n)) / ( (f(a(m)) * f(b(n)) )
是否可以不使用嵌套循环?
我有两个向量 a 和 b 以及一些函数 f。在 MATLAB 中定义此类矩阵的最佳方法(性能)是什么:
A(m,n) = f(a(m)*b(n)) / ( (f(a(m)) * f(b(n)) )
是否可以不使用嵌套循环?
现在不在电脑前,但试试
A=f(a*b')./(f(a)*f(b)')
其中 a 和 b 是列向量。a*b' 是外积。
如果f
支持向量语法,那么它只是:
[A,B] = meshgrid(a,b);
M = f(A.*B) ./ ( f(A).*f(B) );
顺便说一句,我不确定性能会比常规循环更好。更好的配置文件和检查。自引入 JIT 以来,Matlab 循环通常比矢量化操作运行得更快。
这是一个例子:
function CalcGrid()
a = 1:10;
b = 1:10;
[A,B] = meshgrid(a,b);
M = f(A.*B) ./ ( f(A).*f(B) );
figure;surf(M);
end
function y = f(x)
y = x-1;
end