私はいくつかの隣接行列の作成に取り組んでおり、奇妙な問題に遭遇しました。同じスパース行列、さまざまなオブジェクトサイズ
私は1と0の完全な1つの行列を持っています。私はそれの転置(t(X) %*% X
)で乗算し、他のものを実行したいです。ルーチンが本当に遅くなったので、私はそれを明らかに速くなった疎マトリックスに変換しました。
しかし、スパース行列は、マトリックスをスパース形式に変換すると、サイズが2倍になります。ここで
は、その後、私は好奇心旺盛だ
set.seed(666)
nr = 10000
nc = 1000
bb = matrix(rnorm(nc *nr), ncol = nc, nrow = nr)
bb = apply(bb, 2, function(x) x = as.numeric(x > 0))
# Slow and unintelligent method
op1 = t(bb) %*% bb
op1 = Matrix(op1, sparse = TRUE)
# Fast method
B = Matrix(bb, sparse = TRUE)
op2 = t(B) %*% B
# weird
identical(op1, op2) # returns FALSE
object.size(op2)
#12005424 bytes
object.size(op1) # almost half the size
#6011632 bytes
# now it works...
ott1 = as.matrix(op1)
ott2 = as.matrix(op2)
identical(ott1, ott2) # returns TRUE
同じ問題に遭遇し、いくつかの一般的な例です。誰がなぜこれが起こるのか知っていますか?