私は疎な行列を持っていて、ある程度埋める必要がある特定の値を持つエントリ、私は今の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)