/ / MATLABどのようにベクトル化されたフォームを使用して疎行列の個々のエントリを埋める? - パフォーマンス、matlab、行列、ベクトル化、疎行列

MATLABベクトル化されたフォームを使用して疎行列の個々のエントリを埋める方法は? - パフォーマンス、matlab、行列、ベクトル化、疎行列

私は疎な行列を持っていて、ある程度埋める必要がある特定の値を持つエントリ、私は今のforループを使用していますが、それを行う正しい方法ではないことを知っていますので、ループのためにベクトル化できるかどうか疑問に思っていましたか?

K = sparse(N);
for i=vectorofrandomintegers
K(i,i) = 1;
end

もし私がそれをベクトル化すると、

K(A,A) = 1;

それは、各行のすべてのエントリを A 私は個々のエントリ(すなわち、 K(1,1) = 1 または K(6,6)=1)。

また、エントリは対角線上に隣接していないので、恒等行列をその中に入れることはできません。

回答:

回答№1は1

ベクトル化されたメソッドを使用する場合は、線形インデックスを設定する必要があります。問題は、スパース行列を K = sparse(N) Kに直線的にインデックスを付けると、それは一方向のみのサイズで、行と列の両方にはありません。したがって、MATLABに指定する必要があります このスパースを使用して2D配列を格納しようとしています。したがって、それは -

K = sparse(N,N);

Kにインデックスを付ける線形インデックスを取得する sub2ind それらを設定する -

ind1 = sub2ind([N N],vectorofrandomintegers,vectorofrandomintegers);
K(ind1) = 1;

回答№2の場合は1

それはかなり単純です

私は使用する

K((A-1)*N+A))=1;

私はそれがあなたの問題をベクトルとして扱うことで解決するはずだと信じています


回答№3の場合は1

宣言と 次に 疎な行列を埋めて、それを満たすことができます 同時に あなたはそれを定義します:

i = vectorofrandomintegers; j = i;
K = sparse(i,j,1,N,N)