Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
|
![]() |
#1 |
高级会员
注册日期: 2019-11-21
帖子: 3,006
声望力: 66 ![]() |
![]()
我从循环世界(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可以很好地处理循环。 更多&回答... |
![]() |
![]() |