0

我有一个 21128x9 矩阵,格式如下:

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

例如

   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 行、第 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))) + ...
4

2 回答 2

2

你快到了!您需要将 5s 更改为 2s,仅此而已:

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

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

首先设置 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);

并且 no 获得连续行之间以秒为单位的差异向量:

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
于 2013-04-16T13:51:55.050 回答
1

以下是一些简单的步骤:

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

小规模示例:

% Hours Mins Secs:

difference = ([23 12 4] - [23 11 59]);
secvec = difference .* [3600 60 1];
secdiff = sum(secvec)
于 2013-04-16T13:06:57.983 回答