Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 用坐标向量求矩阵元素_R_Vector_Matrix - Fatal编程技术网

R 用坐标向量求矩阵元素

R 用坐标向量求矩阵元素,r,vector,matrix,R,Vector,Matrix,这是一个非常基本的问题,但我似乎无法解决它,也无法在任何地方找到答案:假设我有两个坐标向量x,y,以及一个矩阵m 我想要一个向量z,使得所有I的z[I]=m[x[I],y[I] 我尝试了z=m[x,y],但这会造成内存溢出。向量和矩阵相当大,所以循环几乎是不可能的。有什么想法吗 使用cbind。下面是一个简单的例子: mat <- matrix(1:25, ncol = 5) mat # [,1] [,2] [,3] [,4] [,5] # [1,] 1 6 11

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

我想要一个向量
z
,使得所有
I
z[I]=m[x[I],y[I]


我尝试了
z=m[x,y]
,但这会造成内存溢出。向量和矩阵相当大,所以循环几乎是不可能的。有什么想法吗

使用
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

mat另一种方法是使用这样一个事实,即可以将矩阵作为向量进行索引,元素以列主形式进行编号。使用@AnandoMahto中的示例:

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

谢谢,很好用。你能解释一下它背后的逻辑吗?@UlysseMizrahi,我认为
?Extract
的帮助页面比我解释得更好。我相信这就是所谓的矩阵索引。我已经用那一页的相关段落更新了我的答案。