r - R中循环的优化
问题描述
给定r
的是一个带有lm
列的矩阵,我想将下面的代码优化为最有效的。有任何想法吗?
set.seed(123456)
system.time(expr = {
r = matrix(rnorm(15 * 1500), ncol = 15)
s = 0
lm = ncol(r)
##################
for (j in 1:lm) {
cm = combn(lm, j)
for (i in 1:ncol(cm)) {
val = apply(r, 1, function(x) {
prod(x[cm[, i]])
})
s = s + (-1) ^ (j + 1) * val
}
}
}
###############
)
user system elapsed
110.56 0.07 111.37
解决方案
大约快 65 倍
library(Rfast)
set.seed(123456)
system.time(expr = {
r = matrix(rnorm(15 * 1500), ncol = 15)
s = 0
lm = ncol(r)
for (j in 1:lm) {
val = sapply(
X = combn(lm, j, simplify = FALSE),
FUN = function(i) {
val = (-1) ^ (j + 1) * rowprods(r[, i, drop = FALSE])
}
)
s = s + rowSums(val)
}
})
user system elapsed
1.70 0.09 1.84
推荐阅读
- javascript - Jquery替换id选择器中的特殊字符
- javascript - 从脚本中的var提取数据并使用python将pdf下载到文件夹
- sql-server - 由于错误代码 DTS_E_INDUCEDTRANSFORMFAILUREONERROR 0xC0049067 和 DTS_E_PROCESSINPUTFAILED 0xC0209029 导致派生列失败
- javascript - ScrollTo 不工作
- javascript - Angularjs 在 ng-repeat 中迭代
- python - Python将ips列表转换为网络列表
- powerbi - 矩形覆盖使它们隐藏的视觉对象 Power BI Desktop
- sharepoint - 创建 SharePoint 测验 OOTB
- sql - 计算每月销售额增加/减少
- ios - 如何根据点击的 UITableView 行更改方法的参数?