Performance MATLAB:如何有效地创建一个矩阵,它是一个外积的结果?
我有两个向量a和b,还有一些函数f。 在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(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
,因为第一个输出沿第一个维度递增,第二个输出沿第二个维度递增。