Matlab列表理解

Luc*_*nan 12 matlab list-comprehension

我可以在一个班轮上写下以下内容吗?

x = [1,3,5]
res = zeros(1,size(x,2));
for i=1:size(x,2);
    res(i) = foo(x(i);
end;
Run Code Online (Sandbox Code Playgroud)

假设foo函数没有按预期处理数组.在我的情况下,即使给出数组作为参数,foo也会返回一个标量.

例如,在Python中,它看起来像这样:

x = [1,3,5]
res = [foo(y) for y in x]
Run Code Online (Sandbox Code Playgroud)

abc*_*bcd 13

arrayfun是你需要的.例如:

res = arrayfun(@foo, x)
Run Code Online (Sandbox Code Playgroud)

由于foo始终返回标量,因此上述方法将起作用,并且res也将是与尺寸相同的向量x.如果foo返回变量长度输出,则必须设置'UniformOutput'false0在调用中arrayfun.然后输出将是一个cell数组.

  • @LucyBrennan您可以定义[匿名函数](http://www.mathworks.com/help/techdoc/matlab_prog/f4-70115.html)所采用的参数.例如`arrayfun(@(y)foo(y,2),x)`将列表`x`作为参数提供给匿名函数,其中出现`y`.第二个参数是常量`2`.您可以阅读链接文档以获取更多信息 (5认同)

And*_*ein 6

只是为了添加@yoda的好答案,而不是使用UniformOutput,你也可以使用{}括号:

res = arrayfun(@(t){foo(t)}, x)
Run Code Online (Sandbox Code Playgroud)

此外,在某些情况下,foo已经是矢量化的.

x = 1:10;
foo = @(t)(power(t,2));
res = foo(x);
Run Code Online (Sandbox Code Playgroud)