如何在MATLAB中将数据从向量(列表)重新排列到矩阵(表)中

时间:2015-04-21 05:40:20

标签: matlab matrix vector

鉴于三个K一个数组datetickervolume包含有关金融交易的信息,我想通过{计算T {1}}数组以更易于访问的格式包含相同的信息。我的矢量看起来像这样:

N

我想要获得的矩阵看起来像这样(显示为表格):

ticker    date    volume
______    ____    ______
'ABCD'    735602  123456
'ABCD'    735603  789101
'FGHI'    735602  112131
'NOPQ'    735602  415161
'NOPQ'    735603  718192
'NOPQ'    735605  021232
...       ...     ...

请注意,我的矩阵的尺寸是预先指定的,它们不依赖于我的任何输入向量的大小,因为并非所有的代码都包含在我的输入向量中;同样,并非所有日期都在我的输入向量中表示。其体积值未包含在输入向量中的矩阵的所有系数应设置为 'ABCD' 'FGHI' 'JKLM' 'NOPQ' ... ______ ______ ______ ______ 735602 | 123456 112131 000000 415161 735603 | 789101 000000 000000 718192 735604 | 000000 000000 000000 000000 735605 | 000000 000000 000000 021232 ... 735963

我一直在试验循环和条件,以至于我已经非常困惑。我相信对于拥有更高级知识的人来说,这是一项相当基本的任务。任何有关如何处理此问题的建议都非常感谢!

此问题与this previous one有关。感谢此问题的解决方案,0中的每个条目都可以由相应的volumeticker明确标识,因此不再是问题。

1 个答案:

答案 0 :(得分:0)

首先,您需要将'ticker'字符串转换为表中的数字索引 您可以使用unique

执行此操作
[~,~,tIdx] = unique( ticker );

现在您可以使用accumarrayvolume信息累积到2D表格中

myTable = accumarray( {date, tIdx}, volume, [T N] );

或者,如果myTable的条目是唯一且不需要累积,则可以使用sub2ind

myTable = zeros( T, N );
myTable( sub2ind([T,N], date, tIdx) ) = volume;

另一个选项(如果date的范围太大)是将myTable保存为sparse矩阵

myTable = sparse( date, tIdx, volume );