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'为false或0在调用中arrayfun.然后输出将是一个cell数组.
只是为了添加@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)