2017-06-29 120 views
0

我有一个包含许多单元格的单元格数组A,每个单元格有50个值。这些单元或者具有全零或者其他数字的组合。返回matlab中不包含全零的单元格数组中的单元格

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

在这里查看时,我发现如何在数组或矩阵中找到非零值,但我没有看到任何有关使用非零值查找单元格的内容。

非常感谢您的帮助!

回答

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

存储在单元矩阵的尺寸不同意这种做法无所谓。

+0

嗨,非常感谢您花时间帮助我。当我应用nonzeroind =〜cellfun(@(x)all(x == 0),a)时,我最终得到了全部为零的单元格。我知道我的单元格数组有一些非零值的单元格,所以我不确定发生了什么。你对我在这里可能错过的东西有任何想法吗?非常感谢! – Anonymous

+0

@匿名,这很奇怪,因为它适用于我的示例数据。你能否将你的变量保存在一个.mat文件中并将其上传到你的问题中? 另请注意,我添加了'find'来将逻辑输出转换为线性索引。 – Max

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; 
相关问题