我可以在一个衬里写以下内容吗?
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]
我可以在一个衬里写以下内容吗?
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]
arrayfun
是你需要的。例如:
res = arrayfun(@foo, x)
由于foo
总是返回一个标量,因此上述方法将起作用,并且res
也将是一个与x
. 如果foo
返回可变长度输出,那么您将必须设置'UniformOutput'
为false
或0
在调用arrayfun
. 然后输出将是一个cell
数组。
只是为了补充@yoda的好答案UniformOutput
,您还可以使用{}
括号而不是使用:
res = arrayfun(@(t){foo(t)}, x)
此外,在某些情况下,foo
已经矢量化了。
x = 1:10;
foo = @(t)(power(t,2));
res = foo(x);