【问题标题】:Matlab loop to convert N x 1 matrix to 60 x 4718 matrixMatlab 循环将 N x 1 矩阵转换为 60 x 4718 矩阵
【发布时间】:2014-01-14 23:39:23
【问题描述】:

我是 Matlab 的新手,正在努力创建一个循环来转换 283080 x 2 矩阵 - 第 1 列列出所有 stockID 编号(每个重复 60 次),第 2 列包含所有滞后的月度回报(60每只股票的观察值)到一个 60 x 4718 的矩阵中,每个股票 ID 有一列,其对应的滞后收益位于每个 ID 号下方的 60 行中。

我的目标是然后尝试计算收益的方差-协方差矩阵。

我相信我需要一个循环,因为我将重复这个过程超过 70 次,因为我有多个当前格式相同的数据集

非常感谢您的帮助!

【问题讨论】:

  • 这些条目是按 stockID 排序的还是随机排序的?
  • 看看reshapepermute

标签: matlab matrix


【解决方案1】:

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

一个简单的例子,将 60 替换为 2:

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

【讨论】:

  • 我会添加 stockID = unique(data(:,1)) 来获得对应于每列的股票 ID 向量
  • 我正要这样做,谢谢!但我认为它必须是unique(aux(:,1)) 才能匹配顺序,对吧?
  • 是的,虽然没关系。 unique 默认返回排序值。
  • 感谢大家的帮助,效果非常好!你救了我!
  • @user3196098:请考虑接受答案=)答案左侧的勾号。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多