我从循环世界(C等)进入矩阵世界
我想在向量/矩阵的每个单独成员上调用一个函数,并返回结果向量/矩阵。
这是我目前的做法:
function retval = gauss(v, a, b, c) for i = 1:length(v) retval(i) = a*(e^(-(v(i)-b)*(v(i)-b)/(2*c*c))); endfor endfunction 用法示例:
octave:47> d=[1:1000]; octave:48> mycurve=gauss(d, 1, 500, 100); 现在,关于MATLAB / Octave的所有建议都说:每当您发现自己使用循环并想出一种更好的方法时,就停止。
因此,我的问题是:是否
可以在不使用显式循环的情况下一次调用向量/矩阵的每个成员上的函数,并将结果立即返回到新的向量/矩阵中?
那就是我在寻找这样的东西:
function retval = newfun(v) retval = 42*(v^23); endfunction 也许仅仅是语法糖,仅此而已,但仍然有用。
回答:
该函数应如下所示:
function retval = gauss(v, a, b, c) retval = a*exp(-(vb).^2/(2*c^2)); 我建议您阅读MATLAB文档,了解如何矢量化代码并避免循环:
代码向量化指南
提高性能的技术
还请记住,有时带有循环的代码可以比矢量化的代码更清晰,并且在最近引入的JIT编译器MATLAB可以很好地处理循环。
更多&回答...