0

序文: matlab ガイドルールが述べているように、通常、matlab でスパース行列を効率的に作成したい場合は、行列にインデックスのベクトルを作成し、割り当てたい値のベクトルを作成してから、すべての割り当てを 1 つに集中する必要があります。アトミック操作により、matlab が事前に行列を「準備」し、割り当て速度を最適化できるようになります。簡単な例:

A=sparse([]);
inds=some_index_generating_method();
vals=some_value_generating_method();
A(inds)=vals;

私の質問:inds重複するインデックスが含まれている場合、つまりinds=[4 17 8 17 9]17 が 2 回繰り返される場合はどうすればよいですか。この場合、私が望んでいるのは、同じインデックスにマップされているすべての値の加算がマトリックスに割り当てられることです。つまり、前の例の場合

A(17)=vals(2)+vals(4) %as inds(2)==inds(4)

これを達成するための簡単で、最も重要なことに、迅速な方法はありますか? 「よりスマートな」方法でインデックスと値を生成する方法がありません。

4

1 に答える 1

4

これは役立つかもしれません:

S = sparse(i,j,s,m,n,nzmax)ベクトル、、、およびsを使用しij、が、非ゼロに割り当てられたスペースを持つようなスパース行列mを生成します。ベクトル、、、およびはすべて同じ長さです。ゼロの要素は、対応するとの値とともに無視されます。の値が重複している要素はすべて、一緒に追加されます。nS(i(k),j(k)) = s(k)nzmaxijssijsij

関数については、 MATLABのドキュメントを参照してくださいsparse

于 2012-07-31T02:51:05.717 に答える