Как удалить нули из массива ячеек в MATLAB - PullRequest
0 голосов
/ 09 октября 2018

У меня есть ячейка с именем sequences (406 x 1), где каждая ячейка имеет значение (1x25 double).

sequences=randi(5,406,25); #create an array with values max 5, 406x25
sequences(50:65,5)=0; #Add zeros
sequences=num2cell(sequences,2); #convert to cell

Я хотел бы удалить любые нули из любой ячейки, сохраняя структуру одинаковой (просто удаляя отдельные нули).Я перепробовал каждый ответ из стека и математики, но ничего не сместит их.

например, 1

idxZeros = cellfun(@(c)(isequal(c,0)), sequences);
sequences(idxZeros) = [];

Ничего не меняет в ячейке.

например, 2

zero_idx = bsxfun(@eq, [sequences{:}], 0);
sequences(zero_idx) = {[]};

eg3

 sequences([sequences{:}]==0)={[]};

удаляет нагрузку ячеек

Примечание : я не против оставить его какмассив, удаление нулей и изменение формы, но мне нужна ячейка в конце.Любые мысли будут высоко ценится

1 Ответ

0 голосов
/ 09 октября 2018

Это удаляет любой ноль из любой ячейки, оставляя результаты в каждой ячейке как вектор строки:

result = cellfun(@(x) nonzeros(x).', sequences, 'UniformOutput', false);

Или вы можете заменить nonzeros логическим индексированием:

result = cellfun(@(x) x(x~=0), sequences, 'UniformOutput', false);
...