2014-01-14 213 views
1

我是Matlab的新手,我正在努力創建一個將轉換283080 x 2矩陣的循環 - 列1列出所有stockID號碼(每個重複60倍),第2欄包含所有滯後的每月回報(每個股票60個觀察值)到一個60 x 4718矩陣,每個stockID的列和相應的滯後收益在每個ID號下面的60行中。Matlab循環將N×1矩陣轉換爲60×4718矩陣

我的目標是然後嘗試計算回報的方差 - 協方差矩陣。

我相信我需要一個循環,因爲我將在70倍重複這個過程,因爲我有多個數據集,在這同當前格式

感謝這麼多的幫助!

+0

是按stockID排序的條目還是他們洗牌? – Amro

+0

看看'reshape'和'permute' – Daniel

回答

2

data表示您的矩陣。然後:

aux = sortrows(data,1); %// sort rows according to value in column 1 
result = reshape(aux(:,2),60,[]); %// reshape second column as desired 

如果你需要插入stockID值作爲標題(結果的第一行),將其添加爲最後一行:

result = [ unique(aux(:,1)).'; result ]; 

一個簡單的例子,由2代替60:

>> data = [1 100 
      2 200 
      1 101 
      2 201 
      4 55 
      3  0 
      3 33 
      4 56]; 
>> aux = sortrows(data,1); 
>> result = reshape(aux(:,2),2,[]) 
>> result = [ unique(aux(:,1)).'; result ]; 

result = 

    1  2  3  4 
    100 200  0 55 
    101 201 33 56 
+1

我會添加'stockID = unique(data(:1))'以得到每個列對應的股票ID向量 – Amro

+0

我正要這麼做,謝謝!但我認爲它必須是唯一的(aux(:,1))'來匹配順序,對吧? –

+1

是的,雖然沒關係。 'unique'默認返回排序值。 – Amro