0

ベクトル「Diff」を生成するこのループがあります。生成されたすべての Diff を記録する配列に Diff の値を配置するにはどうすればよいですか? 問題は、Diff の長さがテーブル "CleanPrice" の幅である固定長 (36) でなければならないことです。ただし、col_set の長さは (読み取っているデータ内の NaN の数に応じて) 変化するため、Diff の長さも変化します。私がする必要があるのは、適切な列番号に従って生成された回答を割り当てることです。つまり、diff の行 (i) には col(i) を含める必要があります。この場合、Diff の他のすべての行には「0」または「NaN」を割り当てる必要があります。基本的に、 DiffArrayを (nTrials x 36) の配列にする必要があります。ここで、各行は (36 x 1)の DiffArrayが生成されます。ただ今のところ、colの長さが変わるたびに、

??? 添字付きの代入次元が一致しません。==> 41 での NSSmodel のエラー DiffMatrix(end+1,:)=Diff

これは私のコードです:

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

この投稿でnum2cellを見ましたが、正しく適用する方法がわからず、代わりにそれに関連するエラーが発生し始めました。

4

1 に答える 1

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 (行ベクトル) を計算し、事前に割り当てられた配列を使用しません。上記は、インデックス ベクトルを使用して短い行をマトリックスに配置する方法を説明するためのものです。

于 2012-08-14T09:27:15.707 に答える