作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要生成下三角矩阵索引(行和列对)。当前的实现效率低下(内存方面),特别是当对称矩阵变大(超过 50K 行)时。有更好的办法吗?
rows <- 2e+01
id <- which(lower.tri(matrix(, rows, rows)) == TRUE, arr.ind=T)
head(id)
# row col
# [1,] 2 1
# [2,] 3 1
# [3,] 4 1
# [4,] 5 1
# [5,] 6 1
# [6,] 7 1
最佳答案
这是另一种方法:
z <- sequence(rows)
cbind(
row = unlist(lapply(2:rows, function(x) x:rows), use.names = FALSE),
col = rep(z[-length(z)], times = rev(tail(z, -1))-1))
<小时/>
较大数据的基准:
library(microbenchmark)
rows <- 1000
m <- matrix(, rows, rows)
## Your current approach
fun1 <- function() which(lower.tri(m) == TRUE, arr.ind=TRUE)
## An improvement of your current approach
fun2 <- function() which(lower.tri(m), arr.ind = TRUE)
## The approach shared in this answer
fun3 <- function() {
z <- sequence(rows)
cbind(
row = unlist(lapply(2:rows, function(x) x:rows), use.names = FALSE),
col = rep(z[-length(z)], times = rev(tail(z, -1))-1))
}
## Sven's answer
fun4 <- function() {
row <- rev(abs(sequence(seq.int(rows - 1)) - rows) + 1)
col <- rep.int(seq.int(rows - 1), rev(seq.int(rows - 1)))
cbind(row, col)
}
microbenchmark(fun1(), fun2(), fun3(), fun4())
# Unit: milliseconds
# expr min lq median uq max neval
# fun1() 77.813577 85.343356 90.60689 95.71648 130.40059 100
# fun2() 73.812204 82.103600 85.87555 90.59235 138.66547 100
# fun3() 9.016237 9.382506 10.63291 13.20085 55.42137 100
# fun4() 20.591863 24.999702 28.82232 31.90663 65.05169 100
关于r - 如何有效生成对称矩阵的下三角索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20898684/
我有一个绕其 3 轴旋转的立方体,当 key[a] == true 时,它会向左旋转,就好像它正在滚动一样。将立方体向任何方向旋转 45 度,将其向后旋转 90 度,以获得继续的错觉。这将保持 3
我是一名优秀的程序员,十分优秀!