查看单个帖子
旧 2019-12-10, 20:30   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 Matlab / Octave中的向量/矩阵成员上的无环函数调用

我从循环世界(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可以很好地处理循环。



更多&回答...
poster 当前离线   回复时引用此帖