Matlab的列表理解(Matlab list comprehension)

2019-07-29 18:05发布

我可以写在一个班轮以下?

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

假设预期foo的功能不会处理数组。 在我的情况富返回给数组作为参数,即使是标量。

在Python中,例如,它应该是这样的:

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

Answer 1:

arrayfun是你所需要的。 例如:

res = arrayfun(@foo, x)

由于foo总是返回一个标量,上述将工作和res也将是相同的尺寸的向量x 。 如果foo返回可变长度的输出,那么你将不得不设置'UniformOutput'false0在调用arrayfun 。 然后,输出将是一个cell阵列。



Answer 2:

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

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

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

x = 1:10;
foo = @(t)(power(t,2));
res = foo(x);


文章来源: Matlab list comprehension