0

このような 3 次元行列を宣言しましたが、反復の後半で、3 次元の長さを動的に拡張する必要があります。

現在、3 番目の次元ではなく 2 次元のみを宣言しているため、次のようなエラーが発生することに注意してください。

bins(1,2,2) にアクセスしようとしました。size(bins)=[2,22,1] であるため、インデックスが範囲外です。

しかし問題は、Xk の次元が可変であり、それがどのように必要とされるかを実際に決めることができないことです。変更可能なマトリックスを宣言する方法はありますか?

bins=zeros(2,size(Xtrain,2));
%Some for loop
    bins(Y,k,Xk)=bins(Y,k,Xk)+1;
%end loop
4

1 に答える 1

4

次のように、表記法を使用end + kして行列を動的に拡張できます。

A = zeros(10,10,10);
size(A) %[10 10 10]
Xk = 5;
A(:,:,end+Xk) = 4;
size(A) %[10 10 15]

のサイズはA自動的に増加し、Matlab はその間の値を自動的にゼロで埋めます。ただし、ループ内で配列のサイズを変更することは、プログラミングに適した方法ではありません。これを行わないように、方法を再考することをお勧めします。

于 2013-02-04T03:54:44.117 に答える