Matlab在循环中将元素分配给数组

时间:2012-08-14 09:05:15

标签: arrays matlab for-loop dynamic-data assignment-operator

我有这个循环,它生成一个矢量“Diff”。如何将Diff的值放在一个记录所有Diff生成的数组中?问题是Diff的长度应该是固定长度(36),这是表“CleanPrice”的宽度。但是因为col_set的长度不同(根据它正在读取的数据中的NaN数量),所以Diff的长度也不同。我需要做的是根据适当的列号分配生成的答案。即,diff的行(i)应该包含col(i),其中Diff中的所有其他行应该被赋予“0”或“NaN”。基本上我需要 DiffArray 作为(nTrials x 36)数组,其中每一行都是(36 x 1) DiffArray 生成的。但是,此时,每次col的长度发生变化时,都会出现以下错误:

  

???下标分配尺寸不匹配。   ==>中的错误NSSmodel   在41 DiffMatrix(结束+ 1,:)=差异

这是我的代码:

DiffArray=[];
    StartRow=2935;
    EndRow=2940;
nTrials=EndRow-StartRow;
    for row=StartRow:EndRow;
         col_set=find(~isnan(gcm3.data.CleanPrice(row,1:end)));
         col=col_set(:,2:end);
         CleanPrices=transpose(gcm3.data.CleanPrice(row,col));
         Maturity=gcm3.data.CouponandMaturity(col-1,2);

SettleDate=gcm3.data.CouponandMaturity(row,3);
Settle = repmat(SettleDate,[length(Maturity) 1]);

CleanPrices =transpose(gcm3.data.CleanPrice(row,col));
CouponRate = gcm3.data.CouponandMaturity(col-1,1);
Instruments = [Settle Maturity CleanPrices CouponRate];
PlottingPoints = gcm3.data.CouponandMaturity(1,2):gcm3.data.CouponandMaturity(36,2);
Yield = bndyield(CleanPrices,CouponRate,Settle,Maturity);

SvenssonModel = IRFunctionCurve.fitSvensson('Zero',SettleDate,Instruments)
ParYield=SvenssonModel.getParYields(Maturity);

[PriceActual, AccruedIntActual] = bndprice(Yield, CouponRate, Settle, Maturity);
[PriceNSS, AccruedIntNSS] = bndprice(ParYield, CouponRate, Settle, Maturity);

Diff=PriceActual-PriceNSS
DiffArray(end+1,:)=Diff
end

我在this帖子中查看了 num2cell ,但不确定如何正确应用它并开始收到与此相关的错误。

1 个答案:

答案 0 :(得分:1)

您是否想要向DiffArray添加“不完整”行是否正确?如果你确切知道每个元素应该去哪里,你可能会做这样的事情:

indices = [1:7; 2:8; 3:9; [1 2 3 6 7 8 10]];
Diff = rand(4, 7);
DiffArray = zeros(4, 10) * NaN;

for row = 1:4
    DiffArray(row, indices(row, :)) = Diff(row,:);
end

当然在您的情况下,您将在循环内计算Diff和Index(行向量)而不使用预先分配的数组。以上仅用于说明如何使用索引向量在矩阵中定位短行。