Sai*_*ait 4 indexing matlab function
假设我有一个功能,例如:
function [result] = Square( x )
result = x * x;
end
Run Code Online (Sandbox Code Playgroud)
我有一个像下面这样的数组,
x = 0:0.1:1;
Run Code Online (Sandbox Code Playgroud)
我想要一个y数组,它x使用我的Square函数存储's 的方块.当然,一种方式是以下,
y = zeros(1,10);
for i = 1:10
y(i) = Square(x(i));
end
Run Code Online (Sandbox Code Playgroud)
但是,我想应该有一种更优雅的方式.我尝试了一些我的见解并进行了一些搜索,但无法找到任何解决方案.有什么建议?
Rod*_*uis 10
对于您给出的示例:
y = x.^2; % or
y = x.*x;
Run Code Online (Sandbox Code Playgroud)
其中.*和.^是的逐元素的版本*和^.这是最简单,最快捷的方式.
更一般:
y = arrayfun(@Square, x);
Run Code Online (Sandbox Code Playgroud)
这可能是优雅的,但通常相比较慢
y = zeros(size(x));
for ii = 1:numel(x)
y(ii) = Square(x(ii)); end
Run Code Online (Sandbox Code Playgroud)
我实际上建议远离,arrayfun直到分析表明它比普通循环更快.如果有的话,这将很少.
在新的Matlab版本(R2008及更高版本)中,JIT可以有效地加速循环,以至于arrayfun在将来的版本中实际上可能会消失.
暂且不说:注意我已经使用ii而不是i作为循环变量.在Matlab中,i它j是虚构单元的内置名称.如果将其用作变量名称,则由于需要必要的名称解析,您将失去一些性能.使用除此之外的任何东西i或j将阻止它.