matlab - 在 MATLAB 中的 cell2mat 之前用逻辑 0 替换空单元格

标签 matlab matrix cell-array is-empty

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

有效,但使用循环。

最佳答案

如果您知道您的元胞数组将包含 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

关于matlab - 在 MATLAB 中的 cell2mat 之前用逻辑 0 替换空单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2624016/

相关文章:

matlab - 警告消息标识符

python - Python 中的成对 Kullback Leibler(或 Jensen-Shannon)发散距离矩阵

c++ - Eigen c++ 类型转换

matlab - 根据元胞数组值从矩阵中删除行

arrays - matlab 行标签到列标签

matlab - 如何计算矩阵中给定值的元素数量?

algorithm - 计算给出数组中最小标准偏差的子集

c# - 3D 图形 - 矩阵数学不起作用

arrays - Matlab 数组具有不同数据类型的列?

matlab - matlab中两个单元格相加的方法