将单元格中的单元格返回到matlab中不包含全零的单元格数组中

时间:2017-06-29 18:31:16

标签: arrays matlab plot find cell-array

我有一个包含许多细胞的细胞阵列A,每个细胞有50个值。单元格全部为零,或者是其他数字的组合。

我正在寻找一种方法来确定哪些单元格没有全零,因为我想在图表中绘制那些单元格。如果我尝试绘制单元格数组中的所有单元格,那么matlab处理它的方式太多了。理想情况下,我会得到一个列表,例如A {1},A {53},A {235}等,它们不是全部由零组成。

在这里查看时,我发现了如何在数组或矩阵中找到非零值,但我没有看到任何关于查找具有非零值的单元格的信息。

非常感谢所有人的帮助!

2 个答案:

答案 0 :(得分:0)

如果单元格包含100个单元格x 50行,为什么不将其转换为双矩阵?因为根据您的问题,所有值都是双倍的,只是数字。

首先制作你的牢房,加倍:

    m=zeros(size(a,1),size(a,2));
    m=str2double(a);
% from https://www.mathworks.com/matlabcentral/answers/18509-cell-conversion-to-double
%Then you can just convert 0's to NaN's and plot all freely
   m(m==0) = NaN;

答案 1 :(得分:0)

让我们考虑一下示例数据

a=[{randi(10,1,50)} {randi(10,1,50)} {zeros(1,50)} {randi(10,1,50)}]

然后你可以找到不完全包含零的单元格的索引:

nonzeroind=find(~cellfun(@(x) all(x==0),a))

如果存储在单元格中的矩阵具有多个非单一维度,则必须在最高维度单元格中应用all次数,如下所示:

nonzeroind=find(~cellfun(@(x) all(all(x==0)),a))

使用这种方法存储在单元格中的矩阵大小无关紧要。