0

ループ内でforループを使用してfor(私が思うに)、個別に使用できる多数のベクトルを生成したいと思いますpolyfit

768x768 のマトリックスがあり、これを 768 個の個別のセル ベクトルに分割しました。ただし、各 1x768 マトリックスを 16 ポイントのセクションに分割したいと考えています。つまり、長さが 16 の値である 48 個の新しいベクトルです。次に、この情報を使用してカーブ フィッティングを実行します。

48 個のベクトルのそれぞれに別の名前を付けたいのですが、これを 768 列のそれぞれに対して行いたいと考えています。どちらかを個別に簡単に実行できますが、それらを組み合わせる方法があることを望んでいました。これを for ステートメント内の for ステートメントとして実行しようとしましたが、機能しません。私が望むものを作成する方法について誰かがヒントをくれないかと思いました。コードを添付しました。

Qneすべてのポイントを含む私の768 * 768マトリックスです。

N1=768;
x=cell(N,1);

for ii=1:N1;
   x{ii}=Qnew(1:N1,ii);
end 

for iii = 1:768;
   x2{iii}=x{iii};
    for iv = 1:39
    N2=20;        
    x3{iii}=x2{iii}(1,(1+N2*iv:N2+N2*iv));
    %Gx{iv}=(x3{iv});
    end     
end
4

1 に答える 1

2

内部分割には通常の 2D マトリックスを使用します。なんで?形状を変更するのは簡単で、使用する可能性のあるフィッティング操作の多くは、行列の列に対して既に実行されています。

for ii=1:N1
    x{ii} = reshape(Qnew(:, ii), 16, 48);
end

現在x{ii}は、サイズが 16x48 の 2D マトリックスです。jj 番目の分割ウィンドウを個別に指定したい場合は、x{ii}(:, jj). しかし、多くの場合、その必要はありません。たとえば、各ウィンドウの平均が必要な場合は、 と言うだけmean(x{ii})で、各列の平均が取得され、48 要素の行ベクトルが返されます。

未解決の質問に対する追加の参照: 隣接するのではなくベクトルのウィンドウをオーバーラップさせたい場合はbuffer、信号処理ツールボックスを参照してください。

私の答えを編集する:

さらに一歩進んで、3D マトリックスはおそらく同じサイズのベクトルの最良の表現です。reshape()列方向に読み取り、新しい行列を列方向に埋めることを思い出してください。これは、1 回の形状変更で実行できます。

x = reshape(Qnew, 16, 48, N1);

x は 16x48x768 の 3D 配列になり、ii 番目のベクトルの jj 番目のウィンドウは になりましたx(:, jj, ii)

于 2012-05-29T12:53:35.113 に答える