
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
旨い手があるのかどうか知りませんけれども、回答が付かんようなので…
スパースな行列Xを分解した結果をできるだけスパースにしたい、という話でしたら、XA = QR (Q' Q = I, Rは上三角行列、Aは列の入れ替え操作)とやるんですから、(何法を使おうとも)自由度はAの選び方にしかなく、これによってQやRがどのぐらいスパースになるかが決まる訳で、しかしXがよっぽど直交に近い場合(X' Xがスパースである場合)以外は、Aがどうあれ、結果はスパースとはとても言えないものになるでしょう。
で、結果がスパースでないのなら、計算量を減らすために、要するに0の成分を飛ばす(=0でない成分を選ぶ処理)が素早くできるようにXを圧縮して表現しておくわけですが、結果の方が圧縮できないんだから計算の途中でぐずぐず(スパースでない状態)になってしまうのは必然でしょう。
たとえばグラムシュミットの直交化だと、最初の単位ベクトルpを選んだ直後に他のベクトルqからpに平行な成分を引き算して中間結果を出すから、この時点で今まで0だった成分が非零になる。(pとqの第k成分がどちらも0、という場合のqの第k成分しか0のままで居られない。)これは下手な手ですね。ぐずぐず化をなるべく遅らせるのが肝要だろうと考えるなら、Qの成分の値の計算を、中間結果を保存するのではなくて、その値が完全に決まる段階まで計算を始めないようにすりゃ良い(これは簡単)わけです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
おすすめ情報