鉴于三个K
一个数组date
,ticker
和volume
包含有关金融交易的信息,我想通过{计算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
中的每个条目都可以由相应的volume
和ticker
明确标识,因此不再是问题。
答案 0 :(得分:0)
首先,您需要将'ticker'
字符串转换为表中的数字索引
您可以使用unique
[~,~,tIdx] = unique( ticker );
现在您可以使用accumarray
将volume
信息累积到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 );