If-then-else в анонимной функции - PullRequest
2 голосов
/ 15 мая 2019

Я пытаюсь использовать какой-то оператор if-then-else в анонимной функции, которая сама является частью cellfun.У меня есть массив ячеек, который содержит несколько двойных матриц.Я хотел бы заменить все положительные числа во всех двойных матрицах на +1, а все отрицательные числа на -1.Мне интересно, могу ли я использовать анонимную функцию вместо того, чтобы кодировать отдельную функцию, которую я затем вызываю из cellfun?

Вот игрушечный пример:

mat = [2, 2, 0, -2; -2, 0, 0, 2; -2, 2, -2, 2]
cellarray = repmat({mat}, 3, 1)

Яищу что-то вроде этого:

new_cellarray = cellfun(@(x) if x > 0 then x = 1 elseif x < 0 then x = -1, cellarray, 'UniformOutput', false)

Я тоже пробовал это, однако, по-видимому, мне не разрешено помещать знак равенства в анонимную функцию.

new_cellarray = cellfun(@(x) x(x > 0) = 1, cellarray, 'UniformOutput', false)
new_cellarray = cellfun(@(x) x(x < 0) = -1, cellarray, 'UniformOutput', false)

1 Ответ

6 голосов
/ 15 мая 2019

Вы можете использовать встроенную функцию sign, которая возвращает 1, 0 или -1 в зависимости от ввода:

mat = [2, 2, 0, -2; -2, 0, 0, 2; -2, 2, -2, 2];
cellarray = repmat({mat}, 3, 1);
new_cellarray = cellfun(@sign, cellarray, 'UniformOutput', false);
...