Замените пустые ячейки логическими 0 до Cell2Mat в MatLab
-
26-09-2019 - |
Вопрос
У меня есть массив пустых ячеек и тех, которые я хочу преобразовать в логический массив, где пустые ячейки нули. Когда я использую Cell2Mat, пустые ячейки игнорируются, и я в конечном итоге с матрицей исключительно 1, без ссылки на предыдущий индекс, который они держали. Есть ли способ выполнить эту операцию без использования петель?
Пример кода:
for n=1:5 %generate sample cell array
mycellarray{n}=1;
end
mycellarray{2}=[] %remove one value for testing
Вещи, которые я пробовал:
mylogicalarray=logical(cell2mat(mycellarray));
который приводит к [1,1,1,1], а не [1,0,1,1,1].
for n=1:length(mycellarray)
if isempty(mycellarray{n})
mycellarray{n}=0;
end
end
mylogicalarray=logical(cell2mat(mycellarray));
который работает, но использует петли.
Решение
Если вы знаете, что ваш сотовый массив Только собираюсь содержать и []
(которые представляют ваши нули), вы можете просто использовать функцию cellfun
Чтобы получить логический индекс пустых ячеек, затем отрицайте вектор индекса:
mylogicalarray = ~cellfun(@isempty, mycellarray);
% Or the faster option (see comments)...
mylogicalarray = ~cellfun('isempty', mycellarray);
Если ваши клетки мог все еще содержат нулевые значения (не только []
), вы можете заменить пустые ячейки 0, сначала используя функцию cellfun
Чтобы найти индекс для пустых ячеек:
emptyIndex = cellfun('isempty', mycellarray); % Find indices of empty cells
mycellarray(emptyIndex) = {0}; % Fill empty cells with 0
mylogicalarray = logical(cell2mat(mycellarray)); % Convert the cell array
Другие советы
mycellarray( cellfun(@isempty, mycellarray) ) = {0};
mylogicalarray = logical(cell2mat(mycellarray));