在矩阵中存储循环输出时的错误消息

时间:2016-03-16 12:00:31

标签: matlab loops for-loop matrix storing-data

我有这个程序可以计算我样本中每天实现的协方差,但是我将输出存储在矩阵中会遇到一些麻烦。

该计划如下:

 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
  

订阅的分配维度不匹配。

我尝试了各种方法将输出存储在矩阵中,比如在零上定义矩阵以存储输出,或者让存储矩阵的行维度未定义,但似乎没有任何工作。

我非常感谢有关如何应对这一挑战的建议。

3 个答案:

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