【发布时间】:2016-06-22 16:06:40
【问题描述】:
在 R 编程语言中...
我的代码中的瓶颈:
a <- a[b]
地点:
-
a,b是长度为 9000 万的向量。 -
a是一个逻辑向量。 -
b是a的索引的排列。
此操作很慢:大约需要 1.5 - 2.0 秒。
我认为直接索引会快得多,即使对于大型向量也是如此。
我只是卡住了吗?或者有什么办法可以加快速度?
上下文:
P 是一个大矩阵(10k 行,5k 列)。
行 = 名称,列 = 特征。值 = 实数。
问题:给定一个名字的子集,我需要得到矩阵Q,其中:
- Q 的每一列都已排序(独立于 Q 的其他列)。
- Q 列中的值来自 P 的对应列,并且仅来自 P 中给定名称子集中的行。
这是一个简单的实现:
Psub <- P[names,]
Q <- sapply( Psub , sort )
但是我得到了 10,000 个不同的名称子集(每个子集占总数的 20% 到 90%)。每次获取子集和排序都非常慢。
相反,我可以预先计算顺序向量:
b <- sapply( P , order )
b <- convert_to_linear_index( as.data.frame(b) , dim(P) )
# my own function.
# Now b is a vector of length nrow(P) * ncol(P)
a <- rownames(P) %in% myNames
a <- rep(a , ncol(P) )
a <- a[b]
a <- as.matrix(a , nrow = length(myNames) )
【问题讨论】:
-
你认为什么是快?对于那种大小的向量,这对我来说似乎并不慢......
-
我必须这样做 10k 次
-
您能否为您的实际问题提供更多背景信息?
-
您可以尝试使用 Rcpp。它(你的整个 10k 循环的东西)可能会更快。
-
@nrussell 我添加了上下文。