matlab:如何查找数据的间隔

时间:2016-06-03 12:36:01

标签: matlab dataset intervals

我有一个用户轨迹数据集:每个当前位置的交通拥有这些字段:_ [userId年月日小时分钟第二纬度经度regionId]。根据实地日,我想根据不同时间间隔的日常规模划分轨迹:3小时,4小时,2小时。我已经意识到这个代码运行了4个小时的间隔

% decomposedTraj is a struct that contains the trajectories based on daily scale
  for i=1:size(decomposedTraj,2)
      if ~isempty(decomposedTraj(i).dailyScaled)
      % find the intervals
      % interval [0-4]hours
      Interval(i).interval_1=(decomposedTraj(i).dailyScaled(:,5)>=0&decomposedTraj(i).dailyScaled(:,5)<4);
      % interval [4-8]hours        
      Interval(i).interval_2=(decomposedTraj(i).dailyScaled(:,5)>=4&decomposedTraj(i).dailyScaled(:,5)<8);
      % interval [8-12]hours 
      Interval(i).interval_3=(decomposedTraj(i).dailyScaled(:,5)>=8&decomposedTraj(i).dailyScaled(:,5)<12);
      % interval [12-16]hours
      Interval(i).interval_4=(decomposedTraj(i).dailyScaled(:,5)>=12&decomposedTraj(i).dailyScaled(:,5)<16);
      % interval [16-20]hours
      Interval(i).interval_5=(decomposedTraj(i).dailyScaled(:,5)>=16&decomposedTraj(i).dailyScaled(:,5)<20);
      % interval [20-0]hours
      Interval(i).interval_6=(decomposedTraj(i).dailyScaled(:,5)>=20);
      end    
  end

或更容易理解代码的逻辑:

A=[22;19;15;15;0;20;22;19;15;15;0;20;20;0;22;21;17;23;22]';
A(A>=0&A<4)
A(A>=4&A<8)
A(A>=8&A<12)
A(A>=12&A<16)
A(A>=16&A<20)
A(A>=20)

它运行并给出了正确的答案,但它并不聪明:如果我想更改间隔,我必须更改所有代码...你能帮我找到一个更智能的解决方案吗? ?谢谢   0评论

1 个答案:

答案 0 :(得分:2)

区间UserEntity在您的示例中定义为k,其中[(k-1)*N k*N]。因此,您可以使用N=4循环执行相同的操作:

for

请注意,在此示例中for k=1:floor(24/N) Interval(k) = A(A>=(k-1)*N & A<k*N); end 的每个A(A>=(k-1)*N & A<k*N)的大小不一定相同,因此k应为单元格数组。