我必须在大矩阵中的列之间运行类似的代码.
set.seed(1)
my_vector <- runif( 10000 )
my_sums <- NULL
for ( l in 1:length( my_vector ) ) {
current_result <- my_vector[ my_vector < runif( 1 ) ]
my_sums[l] <- sum( current_result )
}
head(my_sums)
# [1] 21.45613 2248.31463 2650.46104 62.82708 11.11391 86.21950
Run Code Online (Sandbox Code Playgroud)
Sys.time 结果:
user system elapsed
1.14 0.00 1.14
Run Code Online (Sandbox Code Playgroud)
关于如何提高绩效的任何想法?
Kha*_*haa 19
Matt Dowle在基地的优秀数据表R
system.time({
set.seed(1)
my_vector <- runif(10000)
x <- runif(10000)
sorted <- sort(my_vector)
ind <- findInterval(x, sorted) + 1
my_sums <- c(0, cumsum(sorted))[ind]
})
# user system elapsed
# 0 0 0
head(my_sums)
#[1] 21.45613 2248.31463 2650.46104 62.82708 11.11391 86.21950
Run Code Online (Sandbox Code Playgroud)
Mat*_*wle 14
require(data.table)
system.time({
set.seed(1)
my_vector = runif(10000)
DT = data.table(my_vector)
setkey(DT, my_vector)
DT[,cumsum:=cumsum(my_vector)]
my_sums = DT[.(runif(10000)), cumsum, roll=TRUE]
my_sums[is.na(my_sums)] = 0
})
head(my_sums)
# [1] 21.45613 2248.31463 2650.46104 62.82708 11.11391 86.21950
# user system elapsed
# 0.004 0.000 0.004
Run Code Online (Sandbox Code Playgroud)
关于什么sapply?
temp <- sapply(seq_along(my_vector), function(l){
current_result <- my_vector[ my_vector < runif( 1 ) ]
my_sums[l] <- sum( current_result )
})
Run Code Online (Sandbox Code Playgroud)
这会带来一些性能改进吗?
| 归档时间: |
|
| 查看次数: |
948 次 |
| 最近记录: |