【发布时间】:2015-07-13 09:20:22
【问题描述】:
我在为 R 中的特定循环找到 矢量化 表示时遇到了问题。我的目标是提高循环的性能,因为它必须在算法中运行数千次。
我想在每行的向量“级别”定义的特定数组部分中找到最小值的位置。
例子:
Level = c(2,3)
令数组 X 的第一行为:c(2, -1, 3, 0.5, 4)。
在行的1:Level[1] 范围内搜索最小值的位置(即(2, -1)),我得到一个 2,因为 -1 (Level[1]+1):(Level[1]+Level[2])(即(3, 0.5, 4))中搜索最小值的位置,我得到一个 4,因为 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])]))
}
}
它工作正常,但我更喜欢性能更好的解决方案。有什么想法吗?
【问题讨论】:
-
玩转
max.col -
你能添加一个例子,
Levels有 3 个元素吗?第三个范围会是什么样子? -
@Khashaa 正如在上一篇文章中看到的那样,你有正确的 clou。感谢您编辑我的帖子以提高可读性!
标签: r loops vectorization