Понимание списка Matlab

Могу ли я написать следующее в один лайнер?

x = [1,3,5]
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]
res = [foo(y) for y in x]

Ответы на вопрос(2)

Решение Вопроса

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);

Ваш ответ на вопрос