2

事前に非ゼロ要素の数を知っている大規模な疎行列を作成します。要素を追加するたびにスペースを自動的に増やすのではなく、Rでこのマトリックスにスペースを割り当てることは可能ですか? Spallocのようなものが Matlab で行われます。

私が望むものの単純化されたコード例として、次のブロック単位の対角行列の構築を考えてみましょう。

library("Matrix")
n = 1000;
p = 14000;
q = 7;
x_i = Matrix(rnorm(n*p), n, p);
x = Matrix(0, n*q, p*q, sparse=TRUE);
for(i in 1:q) {
    x[((i-1)*n+1):(i*n),((i-1)*p+1):(i*p)] = x_i;
}

行列に n*p*q​​ 個の非ゼロ要素が含まれることを R に事前に伝えることができれば、このプロセスははるかに高速になると思います。

前もって感謝します!

編集:ブロックごとの行列には bdiag() を使用する必要があることがわかりました

library("Matrix")
n = 1000;
p = 14000;
q = 7;
x_i = Matrix(rnorm(n*p), n, p);
lst = list();
for(i in 1:q) {
    lst[i] = x_i;
}
x = bdiag(lst);

これははるかに高速です。

4

0 に答える 0