如何解决用R查找矩阵中每一行的分位数的最快方法是什么?
D <- matrix(rnorm(2000),nrow=2,ncol=1000)
t(matrix(c(quantile(D[1,],c(0.05,0.95)),quantile(D[2,0.95))),nrow=2))
我有一个2×1000矩阵,每个矩阵的列都是对(X,Y)的观察。我想找到每行相同的分位数。说q_0.05和q_0.95。最快的计算方法是什么?
解决方法
尝试matrixStats::rowQuantiles
。
library(matrixStats)
microbenchmark::microbenchmark(baseR=apply(D,1,quantile,c(0.05,0.95)),matrixStats=rowQuantiles(D,probs=c(.05,.95)),times=10L)
# Unit: milliseconds
# expr min lq mean median uq max neval cld
# baseR 222.127 227.1580 238.7553 229.6283 233.1329 326.8730 10 b
# matrixStats 145.262 160.9838 171.9204 161.8530 168.4477 263.1476 10 a
y1 <- t(apply(D,c(.05,.95)))
y2 <- rowQuantiles(D,.95))
stopifnot(all.equal(y1,y2))
数据:
set.seed(42)
D <- matrix(rnorm(2e6),nrow=2,ncol=2e6)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。