我有一个空单元格数组,我想将其转换为逻辑数组,其中空单元格为零。当我使用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));
有效,但使用循环。
答案 0 :(得分:28)
如果您知道您的单元格数组仅将包含1和[]
(代表您的零),您可以使用函数cellfun
来获得逻辑空单元格的索引,然后否定索引向量:
mylogicalarray = ~cellfun(@isempty, mycellarray);
% Or the faster option (see comments)...
mylogicalarray = ~cellfun('isempty', mycellarray);
如果您的单元格 仍然包含零值(不只是[]
),您可以先使用函数cellfun
将空单元格替换为0来查找索引对于空单元格:
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
答案 1 :(得分:6)
mycellarray( cellfun(@isempty, mycellarray) ) = {0};
mylogicalarray = logical(cell2mat(mycellarray));