Преобразование функции в формат cellfun в MATLAB - PullRequest
0 голосов
/ 08 сентября 2018

У меня была матрица A (32x8), для которой я написал следующую функцию

function x = y(A)
 x=[A(:,1:2),isnan(A(:,3:5)),A(:,6:end)];
 x(sum((x==1),2)>0,:) = [];
  end

Теперь у меня есть массив B (100x1), где каждая ячейка содержит матрицу A (32x8) с различными значениями,Итак, как я могу написать функцию, аналогичную описанной выше, для всех ячеек в массиве в MATLAB.

Я пробовал следующим образом

Class=cellfun(@(x) x{:,1:2},isnan{x{:,3:5}},x{:,6:end},B, 'UniformOutput', false);

1 Ответ

0 голосов
/ 08 сентября 2018

Чтобы применить вашу функцию y o к каждому элементу в массиве ячеек B, используйте cellfun следующим образом:

cellfun(@y, B, 'UniformOutput', false);

@y - дескриптор функции, которую вы написали. Он должен существовать, так что если вы напишите y(B{1}), вы получите правильный вывод для первого элемента в B. cellfun просто применяет эту функцию ко всем элементам в массиве ячеек. Это эквивалентно написанию цикла над B.

...