18

我有一个空单元格数组,以及要转换为逻辑数组的单元格,其中空单元格为零。当我使用 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));

这有效,但使用循环。

4

2 回答 2

30

如果您知道您的单元格数组将包含一个和[](代表您的零),您可以使用该函数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
于 2010-04-12T17:34:24.267 回答
8
mycellarray( cellfun(@isempty, mycellarray) ) = {0};
mylogicalarray = logical(cell2mat(mycellarray));
于 2010-04-12T17:34:56.480 回答