【问题标题】:Ensuring values in matrix are between a set range? [duplicate]确保矩阵中的值在设定范围之间? [复制]
【发布时间】:2016-06-14 02:48:54
【问题描述】:

我是 R 新手,我正在研究处理一组数据的函数。

我有一个 20 x 5 的值矩阵,我在其中添加了一个介于 -1 到 1 之间的随机数。如何确保矩阵中的所有值以高效且快速的方式保持在 0-10 之间(无需使用循环一次检查一个值)。

这些是规则:

  • 如果值大于 10,则将其更改为 10
  • 如果值小于 那是0,把它改成0

感谢任何帮助。谢谢!

【问题讨论】:

    标签: r matrix


    【解决方案1】:

    类似

    m[] <- pmax(0,pmin(10,m))
    

    左侧的m[](而不是m)确保矩阵保持其结构。

    这是一个(可能是不必要的)示例:

    lwr <- 0; upr <- 10
    set.seed(101)
    mRaw <- matrix(runif(100, lwr, upr), nrow=20) 
    m1 <- sample(c(-1,1),size=100,replace=TRUE)
    mAdded <- m1 + mRaw
    

    现在夹:

    mAdded[] <- pmax(lwr,pmin(upr,mAdded))
    str(mAdded)
    ## still a matrix: num [1:20, 1:5] 2.72 0 6.1 7.58 3.5 ...
    range(mAdded)  ## 0 10
    

    【讨论】:

    • matrix(sample(c(-1,1),size=100,replace=TRUE),nrow=20) 可能更直接一些
    • 谢谢@Ben Bolker。 :-) 改进代码:library(dplyr) mRaw &lt;- runif(100, 0, 10) %&gt;% as.integer %&gt;% matrix(nrow = 20, ncol = 5) m1 &lt;- matrix(sample(c(-1,1),size=100,replace=TRUE),nrow=20) mAdded &lt;- m1 + mRaw mAdded[] &lt;- pmax(0,pmin(10,mAdded))
    • 我不介意用管道代替它们,但它们似乎并没有在这里增加太多价值......
    • 我来自巨蟒之地。我用 dplyr 写。 :-D
    • 嗯,我不认为管道是 pythonic:stackoverflow.com/questions/28252585/… - 至少看起来 pandas-specific ? (我想我更喜欢x %&gt;% fun1() %&gt;% fun2()x.pipe(fun1).pipe(fun2) 无论如何......)
    猜你喜欢
    • 1970-01-01
    • 2019-12-22
    • 2019-02-28
    • 2016-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-25
    • 1970-01-01
    相关资源
    最近更新 更多