7

Rには、スパース行列を効率的に格納するためのパッケージがあることを知っています。低ランクの行列を効率的に保存する方法もありますか?例えば:

A <- matrix(rnorm(1e6), nrow=1e5, ncol=1e1)
B <- A %*% t(A)

さて、Bメモリに保存するには大きすぎますが、ランクは低くなっています。CPUまたはメモリと交換するために、Bいくつかの基本的な読み取りメソッド(、、など)がオンザフライで実行されるように、効率的な方法で構築および保存するrowSums方法はありますか?colSums

4

2 に答える 2

2

あなたの質問はすでに答えです。このような低ランクの行列を効率的に格納するには、両方の要素を含むデータ構造を作成します。行列とベクトルの乗算が必要な場合は、係数の行列とベクトルの積を使用して右から左に実行できます。

この戦略とデータ構造の 1 つのアプリケーションは、限られたメモリのブロイデンまたは BFGS 準ニュートン メソッドの実装で見つけることができます。

于 2014-02-13T14:29:41.480 に答える
0

これは別のアプローチですが、これが大きな行列に対してどれほど効率的であるかを知るには経験がありません。

ランクが低い場合は、行列に関係のない行が多く含まれていることを意味します。これらの行は、他の行の線形結合です。行列が方程式の線形システムを表す場合、それらの行を連続的に削除するアルゴリズムを設計できます。

行が無関係かどうかを確認するには、その行のない行列のランクがまだ同じかどうかを確認します。行列ランクの計算については、この回答とその回答を参照してください。

于 2013-03-28T10:10:30.130 に答える