使用坐标向量获取矩阵的元素

时间:2013-12-16 17:49:46

标签: r vector matrix

这是一个非常基本的问题,但我似乎无法解决它或在任何地方找到答案:假设我有两个坐标x,y和一个矩阵m

我想要一个向量z,以便所有z[i] = m[x[i],y[i]] i

我尝试了z=m[x,y],但这会造成内存溢出。向量和矩阵非常大,因此循环几乎是不可能的。有任何想法吗 ?

2 个答案:

答案 0 :(得分:8)

使用cbind。这是一个简单的例子:

mat <- matrix(1:25, ncol = 5)
mat
#      [,1] [,2] [,3] [,4] [,5]
# [1,]    1    6   11   16   21
# [2,]    2    7   12   17   22
# [3,]    3    8   13   18   23
# [4,]    4    9   14   19   24
# [5,]    5   10   15   20   25
x <- 1:5
y <- c(2, 3, 1, 4, 3)
mat[cbind(x, y)]
# [1]  6 12  3 19 15

## Verify with a few values...
mat[1, 2]
# [1] 6
mat[2, 3]
# [1] 12
mat[3, 1]
# [1] 3

来自?Extract

  

第三种索引形式是通过数字矩阵,每个维度都有一列:索引矩阵的每一行然后选择数组的单个元素,结果是一个向量。索引矩阵中不允许使用负指数。允许使用NA和零值:忽略包含零的索引矩阵的行,而包含NA的行在结果中生成NA

答案 1 :(得分:3)

另一种方法是使用这样一个事实,即您可以将矩阵索引为矢量,其中元素以列主格式编号。使用@AnandoMahto中的示例:

mat[x+nrow(mat)*(y-1)]
[1]  6 12  3 19 15