相关疑难解决方法(0)

R:将矩阵的上三角部分转换为对称矩阵

我在R中没有矩阵的上三角形部分(没有对角线),并且想要从上三角形部分生成对称矩阵(在对角线上有1但可以稍后调整).我通常这样做:

res.upper <- rnorm(4950)
res <- matrix(0, 100, 100)
res[upper.tri(res)] <- res.upper
rm(res.upper)
diag(res) <- 1
res[lower.tri(res)]  <- t(res)[lower.tri(res)]
Run Code Online (Sandbox Code Playgroud)

这工作正常,但现在我想使用非常大的矩阵.因此,我希望避免同时存储res.upper和res(填充0).有没有什么方法可以直接将res.upper转换为对称矩阵而不必先初始化矩阵res?

r matrix

4
推荐指数
1
解决办法
2296
查看次数

as.matrix 在远处物体上非常慢;如何让它更快?

我找到了一个 R 包Rlof,它使用多线程来计算距离矩阵,它做得很好。

但是,该函数的输出distmc是向量而不是矩阵。应用as.matrix到这个“dist”对象比距离的多线程计算要昂贵得多。

查看函数 help,打印对角线和上三角形的选项在那里,但我不明白应该在哪里使用它们。

有没有办法as.matrix以某种方式节省时间?

可重现的例子:

set.seed(42)
M1 = matrix(rnorm(15000*20), nrow = 15000, ncol =20)
system.time({dA = distmc(M1, method = "euclidean", diag = TRUE,
                         upper = TRUE, p = 2)})
system.time(A = as.matrix(dA))
Run Code Online (Sandbox Code Playgroud)

performance r distance matrix distance-matrix

4
推荐指数
1
解决办法
900
查看次数

标签 统计

matrix ×2

r ×2

distance ×1

distance-matrix ×1

performance ×1