Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance MATLAB:如何有效地创建一个矩阵,它是一个外积的结果?_Performance_Matlab_Matrix - Fatal编程技术网

Performance MATLAB:如何有效地创建一个矩阵,它是一个外积的结果?

Performance MATLAB:如何有效地创建一个矩阵,它是一个外积的结果?,performance,matlab,matrix,Performance,Matlab,Matrix,我有两个向量a和b,还有一些函数f。 在MATLAB中定义此类矩阵的最佳方法(性能方面)是什么: A(m,n) = f(a(m)*b(n)) / ( (f(a(m)) * f(b(n)) ) 是否可以不使用嵌套循环?如果f支持向量语法,那么它只是: [A,B] = meshgrid(a,b); M = f(A.*B) ./ ( f(A).*f(B) ); 顺便说一下,我不确定性能是否会比常规循环更好。更好的配置文件和检查。自从引入JIT以来,Matlab循环通常比矢量化操作运行

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

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

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

如果
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

现在不是在电脑前,但是试试看

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

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

这取决于a、b是行向量还是列向量。您可以通过先执行a=a(:),b=b(:)使其更加健壮。酷。我已经完全忘了meshgrid@jacksonslsmg4此实现对f求值的次数太多。您不想将矩阵传递给f,因为大多数条目都是重复的。我更喜欢在计算中使用
ndgrid
,因为第一个输出沿第一个维度递增,第二个输出沿第二个维度递增。