【发布时间】:2018-01-31 21:48:06
【问题描述】:
我想将 for 循环转换为更快的操作,例如 apply。
这是我的代码
for(a in 1:dim(k)[1]){
for(b in 1:dim(k)[2]){
if( (k[a,b,1,1]==0) & (k[a,b,1,2]==0) & (k[a,b,1,3]==0) ){
k[a,b,1,1]<-1
k[a,b,1,2]<-1
k[a,b,1,3]<-1
}
}
}
这是一个简单的代码,它检查多维数组 k 的每个元素,如果三个元素相同且等于 0,则赋值为 1。
有没有办法让它更快?矩阵 k 有 1,444,000 个元素,运行它需要很长时间。有人可以帮忙吗?
谢谢
【问题讨论】:
-
请提供一个可重现的例子。
-
我的k矩阵确实很大,但想象一下它可以定义如下
k<-array(c(1,1,1,0,2,2,2,0,3,3,3,0),dim=c(2,2,3)) -
只需粘贴
dput(head(k)),或者,如果仍然太大,请缩小尺寸以包含k[c(1,2), c(1,2), 1, c(1:3)]。 -
>k[c(1,2), c(1,2), 1, c(1:3)] , , 1 [,1] [,2] [1,] 0 0 [2,] 0 0 , , 2 [,1] [,2] [1,] 0 0 [2,] 0 0 , , 3 [,1] [,2] [1,] 0 0 [2,] 0 0还有`cimg [1:800, 1:600, 1, 1:3] 0 0 0 0 0 0 0 0 0 0 ...` -
在提出新问题之前,您先接受以前问题的答案怎么样?
标签: r loops for-loop apply cycle