数据如何被分割成范围
我有数字值C表示小时和分钟再予的列表:第一列小时,第二列分钟再予数据如何被分割成范围
C=[19 44;15 57;15 19;0 21;20 21;20 20;0 6;22 0;21 17;17 47;23 51;22 27;21 39;21 36]
我想他们在范围拆分:
ranges= {[0 0; 3 59] [4 0; 7 59] [8 0; 11 59] [12 0; 15 59] [16 0; 19 59] [20 0; 23 59]}
你能帮助我吗?
最简单的办法是,通过提到使用 “HIST()” 和 “histcounts()”
user4694那些不是双打,而是持续时间或时间戳。 无论哪种方式,您必须首先将它们转换为双打,即在时间戳的情况下使用分钟(),并以相同的方式创建特定的bin。这是编码持续时间
X=[duration(0,0,0) duration(4,0,0) duration(3,15,0)]; %and so on
bins=[duration(0,0,0) duration(4,0,0) duration(8,0,0)]
% if you just want the histogramm
hist(X,bins);
% if you want to know which element in X goes to which bin try
[amount_in_bin,Bins,which_bin]=histcounts(minutes(X),minutes(bins));
%or just go for the last one
[~,~,which_bin]=histcounts(minutes(X),minutes(bins));
您可以使用arrayfun
来实现此目的。试试下面的代码:
times = randi(20,1,30)+rand(1,30); %% Example data.
s = arrayfun(@(n) times(times>=0+4*n & times<(4*(n+1)-1)), 0:(24/4-1),'UniformOutput', False)'
celldisp(s)
s{1} =
1.2963 2.4468 2.7948 1.5328 1.3507
s{2} =
5.4868 5.6443 4.9390
s{3} =
9.5470 10.6868 10.1835 8.7802 8.7757 9.4359 8.3786 10.5870
s{4} =
12.8176 13.8759 13.6225
s{5} =
16.9294 17.8116
s{6} =
20.5108
如果你希望你的值进行排序:
s = arrayfun(@(n) sort(times(times>=0+4*n & times<(4*(n+1)-1))), 0:(24/4-1),'UniformOutput', False)'
celldisp(s)
s{1} =
1.2963 1.3507 1.5328 2.4468 2.7948
s{2} =
4.9390 5.4868 5.6443
s{3} =
8.3786 8.7757 8.7802 9.4359 9.5470 10.1835 10.5870 10.6868
s{4} =
12.8176 13.6225 13.8759
s{5} =
16.9294 17.8116
s{6} =
20.5108
我尝试使用我的数据,但它不会给我我想要的结果,我获得该S {1} = [] š{2} = 5 6个5 6 5 6 5 6 š{3} = 9 10 9 10 9 10 9 10 š{4} = 13 14 13 14 13 14 13 14 13 14 13 14 s {5} = 17 18 17 18 17 18 17 18 s {6} = 21 22 21 22 21 22 21 22 – elis56
请发布您的正确数据。你是什么意思:“我有一个数字值(双),表示小时和分钟的列表”? –
这不是你要求的问题。 –
请提供正确语法的数据。 – thewaywewalk
我修改了数据,他们是怎么样的,我已经介绍了范围 – elis56
我建议你去转换C =持续时间(C(:,1),C(:,2),0);在开始时使用持续时间数据类型,因为您可以执行诸如添加和减少等操作,而无需处理您现在可能面临的2值问题 – Finn