我有这个循环,它生成一个矢量“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 ,但不确定如何正确应用它并开始收到与此相关的错误。
答案 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(行向量)而不使用预先分配的数组。以上仅用于说明如何使用索引向量在矩阵中定位短行。