我在找到一個向量化時遇到了問題 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