2013-04-16 107 views
0

我有以下格式的21128x9矩陣:在MATLAB中,如何計算行之間經過的時間在一個矩陣

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))) + ... 
+0

帖子你的代碼爲'etime',我敢肯定有人可以指出你的錯誤 – Dan

+0

丹 - 我已經將它添加到主要問題中,但是我懷疑我是在* etime *的正確軌道上。 – 8eastFromThe3ast

回答

2

你幾乎沒有!你需要改變5秒到2秒,這就是:

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); 

而且沒有得到差的向量我連續的行之間的n秒:

etime(Tnplus1, Tn) 

導致:

ans = 

      6 
      6 
      2 
      3 
     422595 
      15 
      2 
      11 
      9 

此外,如果你不關心的年,月,日的數據只是其設置爲0,即

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

ans = 

     6 
     6 
     2 
     3 
    -9405 
     15 
     2 
     11 
     9 
+1

哦,我明白了!所以時間需要完整的yyyy-mm-dd HH:MM:SS日期格式? – 8eastFromThe3ast

+0

另外,是否有可能從(x)的列1中獲取數據?那麼按照參與者號碼排序'流逝的時間'? – 8eastFromThe3ast

+0

是的,只是連接它。 '[x(2:end,1)etime(Tnplus1,Tn)]' – Dan

1

這裏有一些簡單的步驟:

  • 計算DIF ference要
  • 乘比較包含單位的秒數

小規模例如向量兩行之間:

% Hours Mins Secs: 

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

感謝丹尼斯,我理解個人計算的簡單步驟,我想知道是否有一種方法可以讓Matlab在第一列中的值相同的每一行所經過的時間內進行數學計算。 – 8eastFromThe3ast

+0

您可以使用'bsxfun'輕鬆地從每列中扣除第1列。可以使用相同的函數將您的矩陣與'secvec'相乘。 –