假设我有一个函数,例如:
function [result] = Square( x )
result = x * x;
end
我有一个如下所示的数组,
x = 0:0.1:1;
我想要一个y
数组,存储了的平方x
正在使用我的Square
功能。当然,一种方法是以下,
y = zeros(1,10);
for i = 1:10
y(i) = Square(x(i));
end
不过,我想应该有一种更优雅的方式来做到这一点。我尝试了一些见解并进行了一些搜索,但找不到任何解决方案。有什么建议么?
对于你给出的例子:
y = x.^2; % or
y = x.*x;
其中.*
and .^
是元素方面的版本*
and ^
。这是最简单、最快的方法。
更一般:
y = arrayfun(@Square, x);
这可能很优雅,但与
y = zeros(size(x));
for ii = 1:numel(x)
y(ii) = Square(x(ii)); end
我实际上建议远离arrayfun
直到分析表明它比普通循环更快。如果有的话,这种情况也很少发生。
在新的 Matlab 版本(R2008 及更高版本)中,JIT 可以非常有效地加速循环,例如arrayfun
实际上可能会在未来的版本中消失。
顺便说一句:请注意我已经使用过ii
代替i
作为循环变量。在Matlab中,i
and j
是虚数单位的内置名称。如果将其用作变量名称,由于需要必要的名称解析,您将损失一些性能。使用除i
or j
会阻止这种情况发生。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)