2

我有两个向量 a 和 b 以及一些函数 f。在 MATLAB 中定义此类矩阵的最佳方法(性能)是什么:

A(m,n) = f(a(m)*b(n)) / ( (f(a(m)) * f(b(n)) )

是否可以不使用嵌套循环?

4

2 回答 2

5

现在不在电脑前,但试试

A=f(a*b')./(f(a)*f(b)')

其中 a 和 b 是列向量。a*b' 是外积。

于 2012-09-27T12:09:20.373 回答
3

如果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
于 2012-09-27T12:05:16.217 回答