14

我可以在一个衬里写以下内容吗?

x = [1,3,5,7,9]
res = zeros(1,size(x,2));
for i=1:size(x,2);
    res(i) = foo(x(i));
end;

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

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

x = [1,3,5,7,9]
res = [foo(y) for y in x]
4

2 回答 2

14

arrayfun是你需要的。例如:

res = arrayfun(@foo, x)

由于foo总是返回一个标量,因此上述方法将起作用,并且res也将是一个与x. 如果foo返回可变长度输出,那么您将必须设置'UniformOutput'false0在调用arrayfun. 然后输出将是一个cell数组。

于 2012-06-06T16:41:27.247 回答
6

只是为了补充@yoda的好答案UniformOutput,您还可以使用{}括号而不是使用:

res = arrayfun(@(t){foo(t)}, x)

此外,在某些情况下,foo已经矢量化了。

x = 1:10;
foo = @(t)(power(t,2));
res = foo(x);
于 2012-06-06T16:45:36.987 回答