【问题标题】:Vectorization of findInterval()findInterval() 的向量化
【发布时间】:2014-12-15 03:13:04
【问题描述】:

R 函数 findInterval() 存在以下问题

给定一个向量 X 和一个矩阵 Y,我想找出 X 的元素位于哪个区间。区间是构造的,在 Y 行中有断点。换句话说,对于 X = c(2,3) 和 Y = matrix(c(3,1,4,2,5,4),2,3),输出将为 c(0,2)。我写了以下代码:

X <- c(2,3)
Y <- matrix(c(3,1,4,2,5,4),2,3)

output <- diag(apply(Y,1,function(z)findInterval(X,z)))

它有效。但是,我认为它可以优化,因为 apply 函数返回 2 x 2 矩阵(这就是为什么我必须得到它的对角线)。有没有办法做同样的事情,但是使用函数,它将返回一个向量,将我的向量 X 和矩阵 Y 作为参数?我对高维向量执行此操作,因此获得大小为 10000 x 10000 的不必要矩阵并不是一个好主意恕我直言。为了最大限度地提高效率,我不想使用循环。

提前感谢您的任何反馈。

【问题讨论】:

  • 可能是mapply(findInterval,X, data.frame(t(Y)))?
  • 谢谢!我尝试使用mapply,但我对此很陌生。转换为df有什么技巧。我的意思是,我不明白 mapply(findInterval,X,t(Y)) 的输出 0 0 0 1 1 0。它不应该将函数应用于 X (2) 的第一个元素和 t(Y) (3,4,5) 的第一个 col,然后应用于第二个,给出结果 c(0,2)?

标签: r vectorization intervals


【解决方案1】:

你可以的

rowSums(X > Y)
# [1] 0 2

【讨论】:

  • 好主意!非常感谢!
猜你喜欢
  • 1970-01-01
  • 2017-04-29
  • 2016-09-18
  • 1970-01-01
  • 2012-11-09
  • 2019-10-22
  • 2011-03-04
  • 2011-05-18
  • 1970-01-01
相关资源
最近更新 更多