- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
cbind
在R中重复调用比较耗时,但对各种数据类型也很强大。在绑定(bind)两个矩阵时,我编写的代码比 cbind
快 3 倍。但是 dplyr
包中的 bind_cols
仅比 cbind
快 100 倍。唯一遗憾的是它不能将矩阵作为输入。有人可以使下面的代码更快。另外,如何快速绑定(bind)稀疏矩阵?这是我使用的代码:
require( Rcpp )
func <- 'NumericMatrix mmult(NumericMatrix a,NumericMatrix b) {
//the colnumber of first matrix
int acoln=a.ncol();
//the colnumber of second matrix
int bcoln=b.ncol();
//build a new matrix, the dim is a.nrow() and acoln+bcoln
NumericMatrix out(a.nrow(),acoln+bcoln) ;
for (int j = 0; j < acoln + bcoln; j++) {
if (j < acoln) {
out(_,j) = a(_,j);
} else {
//put the context in the second matrix to the new matrix
out(_,j) = b(_,j-acoln);
}
}
return out ;
}'
a <- matrix(rep(1,2000*100),2000)
b <- matrix(rep(2,2000*10),2000)
cppFunction(func)
system.time(for (i in seq(1,800)) {mmult(a,b)})
system.time(for (i in seq(1,800)) {cbind(a,b)})
identical(mmult(a,b),cbind(a,b))
最佳答案
借鉴这个 comment罗曼·弗朗索瓦 (Romain Francois) 关于我之前的 Rcpp 冒险之一,
func1 <- 'NumericMatrix mmult1(NumericMatrix a, NumericMatrix b) {
int acoln = a.ncol();
int bcoln = b.ncol();
NumericMatrix out = no_init_matrix(a.nrow(), acoln + bcoln);
for (int j = 0; j < acoln + bcoln; j++) {
if (j < acoln) {
out(_, j) = a(_, j);
} else {
out(_, j) = b(_, j - acoln);
}
}
return out;
}'
cppFunction(func1)
set.seed(42)
a <- matrix(rnorm(1e7), 1e3)
b <- matrix(runif(1e7), 1e3)
identical(mmult(a, b), mmult1(a, b))
#TRUE
library(microbenchmark)
microbenchmark(mmult(a, b),
mmult1(a, b),
cbind(a, b),
times = 10)
#Unit: milliseconds
# expr min lq mean median uq max neval
# mmult(a, b) 69.64 70.52 89.71 72.28 128.8 136.6 10
# mmult1(a, b) 50.84 50.95 69.65 51.43 111.6 114.4 10
# cbind(a, b) 192.35 194.67 201.13 195.30 196.1 255.9 10
没什么大不了的,但对于这样一个微不足道的变化来说也不错。
关于c++ - 使用 Rcpp 的 R 快速 cbind 矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31913437/
我想我正在寻找 rbind.fill 的类似物(在 Hadley 的 plyr 包中)对于 cbind 。我看了,没有cbind.fill . 我想做的是: #set these just for t
有人知道为什么以下代码的结果不同吗? a [1] "a" "b" "c" "d" colnames(cbind(ts(a),ts(b))) > [1] "ts(a).a" "ts(a).b" "ts
merger <- cbind(as.character(Date),weather1$High,weather1$Low,weather1$Avg..High,weather1$Avg.Low,sa
不知道为什么会这样。我有一个数据框 df2使用以下变量: EVTYPE TOTAL_FATALITIES TOTAL_INJURIES (fctr)
我正在尝试 cbind或 unnest或 as.data.table部分嵌套的列表。 id <- c(1,2) A <- c("A1","A2","A3") B <- c("B1") AB <- li
我有两个数据系列向量。 x = c("100"=2,"200"=2) y = c("150"=3,"200"=2) 我怎样才能合并它们,以便我得到: x y 100 2 N
我有像下面的 biglist 示例这样的数据,它是 2 个 2 个列表的列表。我想将每个列表中的第二个列表 cbind 一起像下面的结果示例一样。通常,我会尝试类似 lapply(biglist,cb
x = iris$Sepal.Width; y = iris$Species; m = cbind(x,y); m 的输出是: x y [1,] 3.5 1 [2,] 3.0
我有两个名为 h 的列表和 g . 它们每个都包含 244 个数据帧,如下所示: h[[1]] year avg hr sal 1 2010 0.300 31 2000 2
我有 94 个制表符分隔文件,没有标题,位于单个目录“/path/”中,第一列中有基因名称,第二列中有计数。有 23000 行。 我想将/path/中的所有 94 个文件读入 R 并合并所有 94
我正在尝试创建数据框的子集,当我这样做时,R切换日期列的格式。知道为什么或如何解决这个问题吗? > head(spyPr2) Date Open High Low Cl
在提问之前,我搜索并阅读了许多关于 stackoverflow 的其他问题,并尝试了 dplyr 包中的 join,但没有一个给出我想要的结果。 我有两个 dfs 并想将它们组合起来,使 df1$co
我对 cbind 的特性有疑问在数据表和数据框中。 如果我要绑定(bind)一个数据框(df)和一个数据表(dt),那么结果对象的类取决于第一个参数。 例子: > dt df dt x y z
这个问题在这里已经有了答案: Error: could not find function ... in R (10 个回答) 6年前关闭。 我正在使用 R: library(qpcR) final<
我在使用 cbind 向数据框中添加列的脚本时遇到了一些问题。我通过正则表达式选择这些列,我喜欢 cbind 在添加多于一列时自动提供前缀。如果您只附加一列,这将不起作用......即使我将此列转换为
我有 L : Var1 Freq 2 1103 6 6 1107 10 10 1112 7 21 1125 6 24 1129 10 31 1137 5 和
我想对两个 lm 输出进行逐列比较。类似这样的事情,除了我希望看到估计值旁边的估计值嵌套到估计值,Std Error 旁边的 Std Error 等。 x=runif(6);y=runif(6
就我而言,我有一个数字向量(future_prices)。我使用来自另一个向量(这里:pred_commodity_prices$futuredays)的日期向量来创建月份的数字。之后,我使用 cbi
如果我错过了这样一个简单问题的答案,请原谅我。 我想使用 cbind()绑定(bind)两列。其中之一是长度较短的单个条目。 我可以让 R 提供 NA对于缺失值? 该文档讨论了 deparse.lev
当使用cbind函数组合2个或更多矩阵时,生成的矩阵将继承列名称。下面是一个简单的例子来说明这一事实。我有两个 (2x2) 矩阵 m1 和 m2。 m1 的列是 a 和 b; m2 的列是 c 和 d
我是一名优秀的程序员,十分优秀!