0

我有一个充满数字的单元格数组,每行有 44 行和不同的列长度
我怎么能计算每行的列数?(其内容不为空的列)
我使用了 2 种不同的方式,它们都在
第一个错误的地方:

%a is the cell array
s=length(a)

它给出 44 这是行数

第二个

[row, columms]=size(a)

但它也不起作用,因为每行的列数不同。
至少我的意思是不为空的列数
,例如我需要第一行的列数,它是 43(a{1 1:43}),但它给出了每个元素的列数,例如 a{1 ,1} 是 384 或 a{1,2},a{1,3} 等等

4

2 回答 2

1

您需要分别访问单元格数组的每个成员,您正在寻找单元格中包含的数据的大小-单元格是容器。两种方法

for循环:

cell_content_lengths=zeros(1,length(a));
for v=1:length(a)
    cell_content_lengths(v)=length(a{v});
end

细胞乐趣:

cell_content_lengths=cellfun(@length,a);

任何空单元格都只有 length 0。将 for 循环扩展到矩阵很简单,如果您有兴趣,可以使用类似这样的方法将 cellfun 部分扩展到包含矩阵的单元格:

cell_content_sizes=cell2mat(cellfun(@length,a,'uniformoutput',false));

(以上注意,每个元素a需要有相同的维度,否则连接不同大小的矩阵会报错)

编辑

根据您的评论,我想我了解您在寻找什么:

non_empty_cols = sum(~cellfun(@isempty,a),2);

感谢@MZimmerman6,他在我之前就理解了它。

于 2013-07-22T13:51:11.060 回答
0

所以你真正要问的是“我的单元格数组的每一行中有多少非空元素?”

filledCells = ~cellfun(@isempty,a);
columns = sum(filledCells,2);
于 2013-07-22T13:53:25.557 回答