在matlab中,如何计算矩阵中行之间的经过时间

时间:2013-04-16 13:01:45

标签: matlab date

我有以下格式的21128x9矩阵:

x = ['Participant No.' 'yyyy' 'mm' 'dd' 'HH' 'MM' 'SS' 'question No.' 'response']

e.g。

   x =

  Columns 1 through 5

      18        2011          10          26          15
      18        2011          10          26          15
      18        2011          10          26          15
      18        2011          10          26          15
      18        2011          10          26          15
      19        2011          10          31          13
      19        2011          10          31          13
      19        2011          10          31          13
      19        2011          10          31          13
      19        2011          10          31          13

  Columns 6 through 9

      42          33          27           4
      42          39          17           2
      42          45          52           2
      42          47          45           3
      42          50          12           3
       6           5          36           1
       6          20          27           4
       6          22          34           5
       6          33          43           3
       6          42          42           1

其中列2-7是日期向量。 数据按日期/时间排序。

我想计算每个参与者回答每个问题所花费的时间 - 即第1行和第2行,第3行,第3行和第4行,第4行和第5行以及第6行和第7行之间经过的时间, 7和8等 - 最后得到一个矩阵,按参与者编号排序,然后我可以计算每个问题的平均时间。

我已尝试使用 etime 功能,但无济于事。

编辑:关于 etime ,只是为了看看它是否会在实践中发挥作用,我试着写道:

etime(x(2,5:7),x(1,5:7))  

比较第1行和第2行的第5-7列,但我一直回来:

    ??? Index exceeds matrix dimensions.

    Error in ==> etime at 41
    t = 86400*(datenummx(t1(:,1:3)) - datenummx(t0(:,1:3))) + ...

2 个答案:

答案 0 :(得分:2)

你快到了!您需要将5s更改为2s,这就是全部:

etime(x(2,2:7),x(1,2:7))

现在让它们全部让我们制作两个日期向量的矩阵,但是一行彼此不同步:

fisrt设置x:

 x =[ 18        2011          10          26          15        42          33          27           4
      18        2011          10          26          15        42          39          17           2
      18        2011          10          26          15        42          45          52           2
      18        2011          10          26          15        42          47          45           3
      18        2011          10          26          15        42          50          12           3
      19        2011          10          31          13         6           5          36           1
      19        2011          10          31          13         6          20          27           4
      19        2011          10          31          13         6          22          34           5
      19        2011          10          31          13         6          33          43           3
      19        2011          10          31          13         6          42          42           1]

现在提取时间:

Tn = x(1:end-1, 2:7);
Tnplus1 = x(2:end, 2:7);

并且不能获得连续行之间的差异向量:

etime(Tnplus1, Tn)

结果是:

ans =

           6
           6
           2
           3
      422595
          15
           2
          11
           9

此外,如果您不关心年月日数据,只需将它们设置为零,即

Tn(:, 1:3) = 0;
Tnplus1(:, 1:3) = 0;
etime(Tnplus1, Tn)

ans =

       6
       6
       2
       3
   -9405
      15
       2
      11
       9

答案 1 :(得分:1)

以下是一些简单的步骤:

  • 计算要比较的两行之间的差异
  • 与包含每单位秒数的向量相乘

小规模示例:

% Hours Mins Secs:

difference = ([23 12 4] - [23 11 59]);
secvec = difference .* [3600 60 1];
secdiff = sum(secvec)