私は、行列の特定の要素を定期的に更新する必要があるMatlabのアルゴリズムに取り組んでおり、これを行う最善の方法を探しています。ここに私が達成しようとしていることの説明があります:
- MxN array
A
と 1xN vectorがありB
ます。 - 基本的に、 vectorは、どの列を選択する必要があるか
B
を説明する論理インデックスです。A
C = A(:,B)
- 残念ながら、論理ベクトル
B
はプロセスによって異なります。これは、の列数がC
固定されていないことを意味します。 - 他の処理では入力として使用され、 ieと同じサイズの
C
別の配列が生成されます。D
C
size(D) == size(C)
D
次に、 と同じサイズになるように「形状を変更」する必要がありA
ます。A
注意が必要なのは、上記の 2 で選択されなかった列をNaN
s に置き換える必要があることです。もちろん、ループを使用する大雑把な方法でも実行できます。しかし、私はこれを 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
のと同じサイズに「再形成」する必要があります。A
NaN
D = [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.