Условная замена элемента с помощью cellfun - PullRequest
0 голосов
/ 17 мая 2018
vec = randi(10,10,1)
vec(vec < 5) = 0

func = @(x) x(x < 5) = 0    % This isn't valid

Как мне перевести вторую строку кода в дескриптор функции, который я могу использовать вместе с cellfun?

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Вы можете использовать умножение, поскольку, если ваше условие выполнено, у вас есть 1 и 0 в противном случае.

Умножение на значение, обратное условию, дает вам либо неизменное значение (если условие не выполнено), либо желаемую замену 0!

func = @(x) x .* (~(x < 5)) % Replace values less than 5 with 0

Если у вас было другоеПодстановка, вы могли бы расширить ту же логику

func = @(x) x .* (~(x < 5)) + 10 * (x < 5) % replace values less than 5 with 10
0 голосов
/ 17 мая 2018

Как насчет не использования анонимной функции, а дескриптора функции вместо нее?

vec = randi(10,10,1);
vec_cell = num2cell(vec);
vec_cell_out = cellfun(@func, vec_cell);

function x = func(x)
    x(x<5) = 0;
end
...