2014-03-04 172 views
1

我有兩個矩陣A和B.矩陣B是一個兩列矩陣,每行包含矩陣A中元素的一個索引。我想更改矩陣A中的那些元素,這些元素由矩陣B中的每一行索引,爲0.如何更改在另一個矩陣中索引的矩陣中的元素?

有沒有辦法避免使用下面顯示的循環?

> A <- matrix(1:12, 3, 4) 
> B <- matrix(c(1, 2, 2, 2, 3, 4), byrow = TRUE, ncol = 2) 
> A 
    [,1] [,2] [,3] [,4] 
[1,] 1 4 7 10 
[2,] 2 5 8 11 
[3,] 3 6 9 12 
> B 
    [,1] [,2] 
[1,] 1 2 
[2,] 2 2 
[3,] 3 4 
> for (i in 1:nrow(B)) { 
+  A[B[i, 1], B[i, 2]] <- 0 
+ } 
> A 
    [,1] [,2] [,3] [,4] 
[1,] 1 0 7 10 
[2,] 2 0 8 11 
[3,] 3 6 9 0 

回答

3

它就像這樣

A[B] <- 0; 
+0

真的不認爲這會工作。真棒! – stanekam

+0

這確實是一個很好的子集劃分方法。你可以在''['''Details' /'矩陣和數組'''上閱讀更多內容。 – Henrik

+0

從來沒有想到這一點。非常感謝你! –

相關問題