如何将数据拆分为范围

时间:2016-06-01 07:12:51

标签: matlab split double range

我有一个表示小时和小时的数值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]}
你可以帮帮我吗?

2 个答案:

答案 0 :(得分:2)

您可以使用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

答案 1 :(得分:1)

最简单的方法是使用“hist()”和“histcounts()”

用户4694提到的那些不是双倍但是持续时间或时间戳。 无论哪种方式,你必须首先将它们转换为双打,即在时间戳的情况下使用minutes(),并以相同的方式创建特定的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));