我在找到一个向量化时遇到了问题 R中的特定循环表示我的目标是提高循环的性能,因为它必须在循环中运行数千次算法。向量化R循环以获得更好的性能
我想找到每个行由向量'Level'定义的特定数组部分中最低值的位置。
实施例:
Level = c(2,3)
让阵列X的第一行是:c(2, -1, 3, 0.5, 4)
。
在行(即(2, -1)
)的范围1:Level[1]
中搜索最低值的位置,我得到一个2,因为-1 < 2和-1位于该行的第二个位置。然后,搜索第二个范围(Level[1]+1):(Level[1]+Level[2])
(即(3, 0.5, 4)
)中最低值的位置,我得到一个4,因为0.5和0.5站在该行的第四个位置。我不得不在数组中的每一行执行此操作。
我对这个问题的解决方案的工作原理如下:
Level = c(2,3,3) #elements per section, here: 3 sections with 2,3 and 3 levels
rows = 10 #number of rows in array X
X = matrix(runif(rows*sum(Level),-5,5),rows,sum(Level)) #array with 10 rows and sum(Level) columns, here: 8
Position_min = matrix(0,rows,length(Level)) #array in which the position of minimum values for each section and row are stored
for(i in 1:rows){
for(j in 1:length(Level)){ #length(Level) is number of intervals, here: 3
if(j == 1){coeff=0}else{coeff=1}
Position_min[i,j] = coeff*sum(Level[1:(j-1)]) + which(X[i,(coeff*sum(Level[1:(j-1)])+1):sum(Level[1:j])] == min(X[i,(coeff*sum(Level[1:(j-1)])+1):sum(Level[1:j])]))
}
}
它工作正常,但我宁愿一个解决方案具有更好的性能。有任何想法吗?
玩弄'ma x.col' – Khashaa
你可以添加一个'Levels'有3个元素的例子吗?第三个范围如何? –
@Khashaa正如你在上一篇文章中看到的那样,你有正确的方块。感谢您编辑我的帖子以增加易读性! – Stromberg