簡體   English   中英

以矢量化方式查找 R 個矩陣單元

[英]Look up R matrix cells in a vectorized way

我想通過使用數據框中的行和列來查找矩陣單元格。 最好,我想以矢量化的方式執行此操作以獲得最佳性能。 然而,最明顯的語法導致查找所有可能的行列組合,而不僅僅是源自一個數據幀行的組合:

這是一個小例子:

> m1 <- matrix(c(1, 2, 3, 4, 5, 6, 7, 8, 9), 3, 3)
> 
> m1
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9
> 
> p1 <- data.frame(row = c(2, 3, 1), column = c(3, 1, 2))
> 
> p1
  row column
1   2      3
2   3      1
3   1      2
> 
> # vectorized indexing that does not work as intended
> m1[p1$row, p1$column]
     [,1] [,2] [,3]
[1,]    8    2    5
[2,]    9    3    6
[3,]    7    1    4
> 
> # this works as intended, but is possible slow due to R-language looping
> sapply(1 : nrow(p1), function (i) { m1[p1[i, "row"], p1[i, "column"]] })
[1] 8 3 4

sapply調用計算了我期望的 output(僅m1[2, 3]m1[3, 1]m1[1, 2] ),但對於較大的數據幀,它預計會很慢,因為它以 R 語言循環。

關於更好的(理想情況下矢量化的)方式的任何想法?

為了您的預期目的,您需要使用矩陣來使用某些行、列組合對矩陣進行子集化。 所以你可以嘗試:

m1[as.matrix(p1)]
# [1] 8 3 4

或者,如果您有兩個向量:

m1[cbind(row_idx, col_idx)]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM