R:优化依赖于其他向量的索引级比较
我有四个向量R:优化依赖于其他向量的索引级比较,r,vector,R,Vector,我有四个向量 x, y, z, w length(x) = length(y) = length(z) = length(w) = 5000 我想做以下几点: 取向量“w”并遍历从1到5000的每个索引“i”。对于每个索引“i”,在“x”中找到最接近y[i]的索引“j”。然后,取那个索引'j',比较所有i和ji的w[i]>z[j]。。。。ji的意思是j依赖于I 我只想知道这是不是真的,我不想计算对应的is和js 我使用for循环拟合了此过程,并使用which.min查找索引“j”。这很慢。如何
x, y, z, w
length(x) = length(y) = length(z) = length(w) = 5000
我想做以下几点:
取向量“w”并遍历从1到5000的每个索引“i”。对于每个索引“i”,在“x”中找到最接近y[i]的索引“j”。然后,取那个索引'j',比较所有i和ji的w[i]>z[j]。。。。ji的意思是j依赖于I
我只想知道这是不是真的,我不想计算对应的is和js
我使用for循环拟合了此过程,并使用which.min查找索引“j”。这很慢。如何优化
例如:
z <- c(1,2,3,4,5)
w <- c(2,3,2,5,5)
x <- c(200,300,400,500,600)
y <- c(300,300,200,500,600)
我的解决方案计算了j,并进行了所有的比较
all(w > z[apply(abs(outer(x, y, `-`)), 2, which.min)])
这取决于你需要什么。在我的机器上,在一个具有5000个x值的示例上运行这个过程只需不到一秒钟
system.time(
all(w > z[apply(abs(outer(x, y, `-`)), 2, which.min)]))
user system elapsed
0.77000000000000 0.20000000000000 0.97000000000116
all(w > z[apply(abs(outer(x, y, `-`)), 2, which.min)])
system.time(
all(w > z[apply(abs(outer(x, y, `-`)), 2, which.min)]))
user system elapsed
0.77000000000000 0.20000000000000 0.97000000000116