将矩阵逐行映射到其他矩阵上

时间:2015-11-11 21:40:04

标签: r matrix

我试图逐行将矩阵映射到另一个矩阵。也许最好通过一个简单的例子来表明:

startMatrix <- t(matrix( c(2.3, 1.2, 3.6,   6.9, 5.3, 6.7), nrow = 3, ncol = 2))
mapMatrix <- t(matrix( c(1, 1.3, 2, 2.5, 3,   5, 5.6, 6, 6.2, 7), nrow = 5, ncol = 2))

现在mapMatrix充当startMatrix的网格,[1, 1.3, 2, 2.5, 3]是第一行startMatrix的网格,[5, 5.6, 6, 6.2, 7]是第startMatrix行第二行的网格。此外,startMatrix被映射到比其自身更小的最近元素,例如2.3转到26.7转到6.2

因此,在将startMatrix映射到mapMatrix时,结果应该是一个如下的矩阵:

result = [2, 1, 3 ;
          6.2, 5, 6.2]

其中;表示行的结尾。

我正在寻找一种快速的方法,因为对于超过100行和1000列的矩阵,这种方法必须执行超过10,000次。

1 个答案:

答案 0 :(得分:0)

请注意,mapMatrix的每一行都必须是升序

startMatrix <- t(matrix( c(2.3, 1.2, 3.6,   6.9, 5.3, 6.7), nrow = 3, ncol = 2))
mapMatrix <- t(matrix( c(1, 1.3, 2, 2.5, 3,   5, 5.6, 6, 6.2, 7), nrow = 5, ncol = 2))

res <- do.call(rbind,lapply(1:nrow(startMatrix), 
              function(m) mapMatrix[m,][findInterval(startMatrix[m,],mapMatrix[m,])]))

希望这有帮助!

> res
     [,1] [,2] [,3]
[1,]  2.0    1  3.0
[2,]  6.2    5  6.2