我有一个 .mat 文件,其中包含 2006-2100 年的数据。每年都有不同数量的线路。我需要计算 2006 年有多少行,2007 年有多少行,等等。
设置,按列,是:年,月,日,纬度,长我只想计算包含相同年份条目的行数,并用包含该信息的数组返回一个数组。
我在想一个 for 或 while 循环应该可以工作,但我不知道如何纠正它。
我有一个 .mat 文件,其中包含 2006-2100 年的数据。每年都有不同数量的线路。我需要计算 2006 年有多少行,2007 年有多少行,等等。
设置,按列,是:年,月,日,纬度,长我只想计算包含相同年份条目的行数,并用包含该信息的数组返回一个数组。
我在想一个 for 或 while 循环应该可以工作,但我不知道如何纠正它。
如果我们假设您的数据在数字矩阵中,您可以这样做:
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)];
要计算数字条目,您可能需要使用histc
years = unique(data(:,1);
counts = histc(data(:,1),years);
因为你只想计算行数,你可以写一些简单的东西,比如:
years = unique(data(:, 1));
counts = arrayfun(@(year) nnz(data(:, 1) == year), years);
years
包含唯一的年份,以及numRows
它们被找到的次数。
您还可以使用受乔纳斯回答启发的单线:
[counts, years] = hist(data(:,1), unique(data(:,1))');