0

私は、行列の特定の要素を定期的に更新する必要があるMatlabのアルゴリズムに取り組んでおり、これを行う最善の方法を探しています。ここに私が達成しようとしていることの説明があります:

  1. MxN arrayAと 1xN vectorがありBます。
  2. 基本的に、 vectorは、どの列を選択する必要があるかBを説明する論理インデックスです。AC = A(:,B)
  3. 残念ながら、論理ベクトルBはプロセスによって異なります。これは、の列数がC固定されていないことを意味します。
  4. 他の処理では入力として使用され、 ieと同じサイズのC別の配列が生成されます。DCsize(D) == size(C)
  5. D次に、 と同じサイズになるように「形状を変更」する必要がありAます。A注意が必要なのは、上記の 2 で選択されなかった列をNaNs に置き換える必要があることです。もちろん、ループを使用する大雑把な方法でも実行できます。しかし、私はこれを Matlab の方法、つまり線形または論理インデックス作成、ベクトル化などで実行しようとしています。

物事を明確にするためのいくつかの例:

まあ言ってみれば

A = [1 2 3; 4 5 6; 7 8 9] 
B = [1 0 1] 
C = A(:,B) = [1 3; 4 6; 7 9] 

いくつかの処理の後、私は取得しますD = [2 5; 6 7; 3 3]。ここで、ieでパディングするDのと同じサイズに「再形成」する必要があります。ANaND = [2 NaN 5; 6 NaN 7; 3 NaN 3]

今まで試したこと、

Atmp = NaN(size(A));
Btmp = find(repmat(B,[size(B,1),1]));
Atmp(Btmp) = D(Btmp); %-> error because D is smaller than A.
4

1 に答える 1

2

どうですか

fullD = NaN(size(A));
fullD(:, B) = D;
于 2013-05-21T08:58:27.900 に答える