MATLAB - 计算每年的参赛作品数量

时间:2013-04-08 18:50:27

标签: matlab for-loop count while-loop sum

我有一个.mat文件,其中包含2006年至2100年的数据。每年都有不同数量的线路。我需要计算2006年的线数,2007年的数量等等。

按列设置为:年,月,日,纬度,长 我只想计算包含相同Year条目的行数,并使用包含该信息的数组返回一个数组。

我认为for或while循环应该有效,但我不知道如何正确。

3 个答案:

答案 0 :(得分:2)

如果我们假设您的数据在数字矩阵中,您可以这样做:

num_lines2006 = sum(data(:,1)==2006);
data2006 = data(data(:,1)==2006),:);

如果你想为相应的年份添加一个行数,那么这是一个带循环的解决方案:

for k=size(data,1):-1:1
    num_year(k,1) = sum(data(:,1)==data(k,1));
end
data = [data num_year];

这是一个没有循环的解决方案:

[unq_year,~,idx] = unique(data(:,1),'stable');
num_year = grpstats(data(:,1),unq_year,@numel);
data = [data num_year(idx)];

答案 1 :(得分:1)

由于你只想计算行数,你可以写一些简单的东西:

years = unique(data(:, 1));
counts = arrayfun(@(year) nnz(data(:, 1) == year), years);

years包含唯一年份,numRows包含找到它们的次数。

你也可以使用Jonas的答案启发的单线:

[counts, years] = hist(data(:,1), unique(data(:,1))');

答案 2 :(得分:1)

要计算数字条目,您可能需要使用histc

years = unique(data(:,1);
counts = histc(data(:,1),years);