如何使用cbind a循环R在中创建空矩阵
我想对R中每个步骤生成的矩阵进行cbind,如何在matlab中创建一个初始空矩阵,比如result=[],然后对每个迭代进行cbind?这将创建一个包含所有1的100x10矩阵。它应该让你对这些东西的一般形式有一个概念如何使用cbind a循环R在中创建空矩阵,r,matrix,cbind,R,Matrix,Cbind,我想对R中每个步骤生成的矩阵进行cbind,如何在matlab中创建一个初始空矩阵,比如result=[],然后对每个迭代进行cbind?这将创建一个包含所有1的100x10矩阵。它应该让你对这些东西的一般形式有一个概念 my.matrix <- c() for(i in 1:10){ my.matrix <- cbind(my.matrix, rep(1,100)) } my.matrix这将创建一个包含所有1的100x10矩阵。它应该让你对这些东西的一般形式有一个概念
my.matrix <- c()
for(i in 1:10){
my.matrix <- cbind(my.matrix, rep(1,100))
}
my.matrix这将创建一个包含所有1的100x10矩阵。它应该让你对这些东西的一般形式有一个概念
my.matrix <- c()
for(i in 1:10){
my.matrix <- cbind(my.matrix, rep(1,100))
}
my.matrix在循环中使用cbind
非常慢。如果预先知道大小,可以预先分配矩阵并填充循环中的列。否则,请使用列表
。创建一个空列表,并将向量添加到循环中的列表中。然后,在循环完成后,将列表cbind到一个矩阵中
时间:
Preallocate matrix:
user system elapsed
1.024 0.064 1.084
Grow matrix with cbind:
user system elapsed
76.036 50.146 125.840
Preallocate list:
user system elapsed
0.788 0.040 0.823
Grow list by indexing:
user system elapsed
0.821 0.043 0.859
代码:
预先分配矩阵。
f1=函数(x){
种子集(2718)
mat=矩阵(ncol=x,nrow=x)
对于(1:x中的i){
mat[,i]=rnorm(x)
}
返回(mat)
}
#用cbind生长矩阵。
f2=函数(x){
种子集(2718)
mat=c()
对于(1:x中的i){
mat=cbind(mat,rnorm(x))
}
返回(mat)
}
#预先分配列表。
f3=功能(x){
种子集(2718)
lst=向量(“列表”,长度=x)
对于(1:x中的i){
lst[[i]]=rnorm(x)
}
res=do.call(cbind,lst)
返回(res)
}
#通过索引增加列表。
f4=功能(x){
种子集(2718)
lst=列表()
对于(1:x中的i){
lst[[i]]=rnorm(x)
}
res=do.call(cbind,lst)
返回(res)
}
x=3000
system.time(r1在循环中使用cbind
非常慢。如果事先知道大小,可以预先分配矩阵并填充循环中的列。否则,使用列表
。创建空列表并向循环中的列表添加向量。然后,在循环完成后,将列表cbind到矩阵中
时间:
Preallocate matrix:
user system elapsed
1.024 0.064 1.084
Grow matrix with cbind:
user system elapsed
76.036 50.146 125.840
Preallocate list:
user system elapsed
0.788 0.040 0.823
Grow list by indexing:
user system elapsed
0.821 0.043 0.859
代码:
预先分配矩阵。
f1=函数(x){
种子集(2718)
mat=矩阵(ncol=x,nrow=x)
对于(1:x中的i){
mat[,i]=rnorm(x)
}
返回(mat)
}
#用cbind生长矩阵。
f2=函数(x){
种子集(2718)
mat=c()
对于(1:x中的i){
mat=cbind(mat,rnorm(x))
}
返回(mat)
}
#预先分配列表。
f3=功能(x){
种子集(2718)
lst=向量(“列表”,长度=x)
对于(1:x中的i){
lst[[i]]=rnorm(x)
}
res=do.call(cbind,lst)
返回(res)
}
#通过索引增加列表。
f4=功能(x){
种子集(2718)
lst=列表()
对于(1:x中的i){
lst[[i]]=rnorm(x)
}
res=do.call(cbind,lst)
返回(res)
}
x=3000
system.time(r1,尽管您最好使用灵活的方法,如sappy(1:10,函数(x)rep(x,100))
来获得相同的矩阵结果。尽管您可能最好使用灵活的方法,如sappy(1:10,函数(x)rep(x,100))
获得相同的矩阵结果。这是一个惊人的答案@bdemarest这是一个惊人的答案@bdemarest