Замените пустые ячейки логическим 0 прежде cell2mat в MATLAB

У меня есть массив пустых ячеек и, которые я хочу преобразовать в логический массив, где пустые ячейки являются нулями. Когда я использую cell2mat, пустые ячейки проигнорированы, и я заканчиваю с матрицей только 1's без ссылки на предыдущий индекс, который они содержали. Существует ли способ выполнить эту операцию, не используя циклы?

Пример кода:

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));

который работает, но использует циклы.

17
задан niton 21 April 2015 в 02:30
поделиться

2 ответа

Если вы знаете, что ваш массив ячеек только будет содержать единицы и [] (которые представляют ваши нули), вы можете просто используйте функцию 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
28
ответ дан 30 November 2019 в 12:07
поделиться
mycellarray( cellfun(@isempty, mycellarray) ) = {0};
mylogicalarray = logical(cell2mat(mycellarray));
6
ответ дан 30 November 2019 в 12:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: