如何在MATLAB中计算Cell数组的行数

3

我想在MATLAB中计算一个Cell数组的行数。 我使用下面的代码来计算Cell数组的列数,但我不知道如何计算它的行数。

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

作为一个例子,我有一个单元格数组 x:
x =     [5]    [1x8 double]    [5]

这个单元数组有一行和三列。我需要一个代码来计算行中等于 "1" 的数量,但我没有找到计算它的方法。


1
你能举个例子吗?数组a的单元格内容是什么? - Luis Mendo
2
从您计算列数的方式推断:sum(filledCells)用于计算行数。 - Oleg
@Oleg,它没有起作用。 - SaraDean
你的问题不够清晰,当解决方案很简单时请检查4个答案。如果你一开始就提供了带有“x”的示例,你本来只需要1分钟就能得到答案。为避免将来的混淆,“一个单元数组中的行数”可能指的是单元数组的内容。因此,为避免混淆,请记住单元数组是一个包装器,它的内容可以是任何东西,因此请使用“单元数组的大小”。 - Oleg
@Oleg 如果我知道答案就在数组的大小上,那我根本不会问这个问题。 我只是想知道一个单元格数组中行数的数量,我认为这很清楚。 - SaraDean
4个回答

6

我试用了大部分的想法,但是都没有成功。然后在herohuyongtao的帮助下,我得到了这个正确运行的想法。

 [nr,nc]=size(x)

第几个数字是行数? 谢谢大家。


1
现在我知道你的意思了。是的,这个会起作用。多么简单啊! :) - herohuyongtao
@herohuyongtao 是的,那很简单,谢谢你。 - SaraDean

3

稍微通用一点的方法:适用于行或列,并考虑每个单元格的大小:

dim = 1; %// 1 for rows, 2 for columns
result = sum(cellfun(@(c) size(c,dim), a), dim);

例子:

>> a = {1, [2 3], []; 4, [], 5}
a = 
    [1]    [1x2 double]     []
    [4]              []    [5]
>> dim = 1;

提供

>> result = sum(cellfun(@(c) size(c,dim), a), dim)
result =
     2     1     1

2

尝试

%% "a" is the cell array, total num of rows will be saved in "rows"
num = length(a); % num of objects in "a" - big rows
rows = 0;
for i=1:num
    [r c] = size(C{i})
    rows = rows+r;
end

它不能正确地处理所有示例,例如x{1,1}=[2 3 4],x{1,2}=[2],x{1,3}=[2 3 4]。 - SaraDean
@SaraDean 我刚在MATLAB中测试了一下,结果完美无误。它返回的是rows=3,对吧? - herohuyongtao
@SaraDean 为什么不是3?它确实有3行。我不明白。 - herohuyongtao
也许我错了!?x{行,列}是不是错了?x{1,1:3}表示一行三列,对吗? - SaraDean

2
最简单的方法是获取尺寸的第一个维度。
rowCount = size(x,1)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接