调用数组中所有元素的函数

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中,ij是虚构单元的内置名称.如果将其用作变量名称,则由于需要必要的名称解析,您将失去一些性能.使用除此之外的任何东西ij将阻止它.