【问题标题】:Finding maximum of two vectors without a loop?在没有循环的情况下找到最多两个向量?
【发布时间】:2012-12-30 17:35:05
【问题描述】:

如果有两个向量,比如说xy

for (i in 1:length(x))
   z[i] = max(x[i],y[i])

您能帮我在不使用循环的情况下执行此操作吗?

【问题讨论】:

标签: r vectorization


【解决方案1】:

假设向量xy 的长度相同,那么pmax 就是你的函数。

z = pmax(x, y)

如果长度不同,pmax 表达式将返回与循环不同的值,因为回收。

【讨论】:

    【解决方案2】:

    为了完整起见,我提供了一个使用 apply 的解决方案:

    Z = cbind(x,y)
    apply(Z, 1, max)
    

    我不知道不同解决方案在速度方面的比较,但是,@JevgenijsStrigins,你可以很容易地检查。

    【讨论】:

    • 我同意,但我添加了apply,因为它在可以应用的功能方面更加灵活。
    • 当然。 library(benchmark); set.seed(101); x <- runif(1000); y <- runif(1000); benchmark(apply(cbind(x,y),1,max),pmax(x,y)) 表明 pmax 快了大约 40 倍(不知道 cbind() 的成本是多少)
    • cbind 可能会有一些开销,但我无法想象它会导致速度下降 40 倍。
    猜你喜欢
    • 1970-01-01
    • 2021-10-12
    • 1970-01-01
    • 1970-01-01
    • 2015-11-11
    • 1970-01-01
    • 2020-02-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多