2016-10-24 240 views
3

我已經提取了一些元素我想看看數組的indeces如下:將哪個(,arr.ind = T)回饋到R中的矩陣的最佳方法?

mat = matrix(0,10,10) 

arrInd = which(mat ==0,arr.ind = T) 

然後我做這個矩陣的一些更多的操作,並最終與載體或行rowInd和列向量結束colInd。我想讓我們把這些數據插入另一個矩陣,比如說mat2。但我似乎無法找到一種方法來做到這一點,而無需循環或自己進行模塊化算術計算。我意識到我可以採取類似

mat2[rowInd*(colInd-1)+rowInd] 

爲了轉換回一維索引。但是由於R通常建立了執行這種事情的函數,我想知道是否有更簡潔的方法來做到這一點?這似乎很自然,像which(,arr.ind=T)這樣的方便的數據處理函數會有一個方便的逆。

編輯:我試過使用mat2[rowInd,colInd],但這沒有奏效。

最佳,

保羅

+0

我猜測矩陣的內存表示不是2維的?行和列只是矩陣的屬性? –

+1

@zheyuan李:謝謝你的迴應。我應該注意到,在操作之後,我的行indeces和列indeces被存儲爲單獨的向量。但是,由於你的repsonse,現在看來很明顯,我需要的是'mat2 [cbind(rowInd,colInd)]''。謝謝! – Paul

回答

1

對使用​​有矩陣索引上R intro: indexing a matrix讀。 which(, arr.ind = TRUE)返回適合直接使用矩陣索引的兩列矩陣。例如:

A <- matrix(c(1L,2L,2L,1L), 2) 
iv <- which(A == 1L, arr.ind = TRUE) 

#  row col 
#[1,] 1 1 
#[2,] 2 2 

A[iv] 
# [1] 1 1 

如果您要根據iv值更新另一個矩陣B,只是做

B[iv] <- replacement 

也許出於某種原因你分開行索引和列索引rowIndcolInd。在這種情況下,只需使用

cbind(rowInd, colInd) 

作爲索引矩陣。