我有这个程序可以计算我样本中每天实现的协方差,但是我将输出存储在矩阵中会遇到一些麻烦。
该计划如下:
for i=1:66:(2071*66)
vec = realized_covariance(datapa(i:i+65),data(i:i+65),datapo(i:i+65),data(i:i+65),'wall','Fixed',fixedInterval,5)
mat(2,4142) = vec
end
输出:
vec =
1.0e-03 *
0.1353 -0.0283
-0.0283 0.0185
订阅的分配维度不匹配。
我尝试了各种方法将输出存储在矩阵中,比如在零上定义矩阵以存储输出,或者让存储矩阵的行维度未定义,但似乎没有任何工作。
我非常感谢有关如何应对这一挑战的建议。
答案 0 :(得分:1)
我使用了一种解决方案来完成这项工作。
我定义了一个矩阵,然后使用以下内容填充我的所有输出:
A = zeros(0,0) %before loop, only serve to define the storing matrix
A = [A; vec]%after the calculating function, inside the loop.
答案 1 :(得分:0)
您尝试将2 x 2
矩阵存储到单个元素中。即右侧有4个元素,左侧有一个元素。这不合适。看到这样的:你家附近有一个车库,有1辆车适合。你有三个朋友过来,他们也想把车停在里面。这是一个问题,因为你只有一个空间。所以你必须买一个更大的车库:在左边分配4个元素(例如mat(ii:ii+1,jj:jj+1) = [1 2;3 4]
),或使用单元格/结构数组。
作为Steve suggests in a comment below,您可以非常轻松地使用3D矩阵:
counters = 1:66:(2071*66);
mat = zeros(2,2,numel(counters)); %// initialise output matrix
for ii=1:numel(counters)
vec = realized_covariance(datapa(counters(ii):counters(ii+65)),...
data(counters(ii):counters(ii+65)),datapo(counters(ii):counters(ii+65)),...
data(counters(ii):counters(ii+65)),'wall','Fixed',fixedInterval,5)
mat(:,:,ii) = vec; %// store in a 3D matrix
end
现在mat
是3D,前两个坐标是常规输出,即vec
,最后一个索引是迭代次数。因此,要访问迭代1032
的输出,您可以mat(:,:,1032)
,可能周围有squeeze
,以使其成为2D而不是3D。
答案 2 :(得分:0)
实际上mat(2,4142)
是矩阵中的单个位置,您无法为其分配四个值。
每次要为其分配值时,都需要在mat
内定义确切位置。试着这样做:
mat=zeros(2,2142);
for k=1:66:(2071*66)
vec=realized_covariance(datapa(i:i+65),data(i:i+65),datapo(i:i+65),data(i:i+65),'wall','Fixed',fixedInterval,5)
mat(:,[(((k-1)/66)*2)+1 (((k-1)/66)*2)+2])=vec;
end