2015-11-11 97 views
0

我試圖將矩陣映射到另一個矩陣上,逐行。也許是更好的通過一個簡單的例子來說明這一點:將矩陣映射到其他矩陣,逐行

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.76.2

因此,映射到startMatrixmapMatrix時結果應該是一個矩陣,如下所示:

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

其中;表示行的結尾。

我在尋找一種快速的方法,因爲對於超過100行和1000列的矩陣,這樣的過程必須執行超過10.000次。

+0

開始的地方:'x = c(2.3,1.2,3.6); y = c(1,1.3,2,2.5,3); y [findInterval(x,y)]' – Frank

+0

你有mapMatrix作爲矩陣的原因嗎?我不瞭解你目前存儲矩陣的方式。 1,1.3,2,2.5,3出現在矩陣的位置11,12,21,22,31 –

+0

@road_to_quantdom對不起,我糾正了提交的代碼。現在它應該是有道理的。 –

回答

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 
+0

@N Meibergen請讓我知道這是否正常工作 –