第一次在统计之都论坛发帖,如有冒犯欢迎指正。
现有一个结构为int [1:100, 1:100, 1:3]的三维数组A,数组中的每一个元素是0-255之间的整数。(是的,A是一个100x100的24位图像,图像的颜色是分红绿蓝三个通道存储的)
另有一个结构为int [1:2, 1:5]的、两行五列的矩阵B,B的每一列表示一个坐标,即两个0-100之间的整数。比如:
> B
[,1] [,2] [,3] [,4] [,5]
[1,] 69 69 72 72 78
[2,] 10 11 45 46 5
请问我有没有办法在不使用循环的条件下,以B作为索引,读取A中对应坐标的颜色,得到一个结果为5x3或者3x5的矩阵?
失败的尝试一:将B转置以后得到5x2的矩阵,留出第三维的下标不写,但是这种情况下会产生数据结构错误:
> A[t(B),]
Error in A[t(B), ] : incorrect number of dimensions
失败的尝试二:将B的两行(X坐标和Y坐标)分别读取出来,作为A的下标索引。但是这种情况下会取得所有X坐标和Y坐标交叉处的值:
> A[B[1,],B[2,],]
, , 1
[,1] [,2] [,3] [,4] [,5]
[1,] 237 237 34 34 255
[2,] 237 237 34 34 255
[3,] 237 237 255 34 237
[4,] 237 237 255 34 237
[5,] 237 237 255 255 237
, , 2
[,1] [,2] [,3] [,4] [,5]
[1,] 28 28 177 177 242
[2,] 28 28 177 177 242
[3,] 28 28 242 177 28
[4,] 28 28 242 177 28
[5,] 28 28 242 242 28
, , 3
[,1] [,2] [,3] [,4] [,5]
[1,] 36 36 76 76 0
[2,] 36 36 76 76 0
[3,] 36 36 0 76 36
[4,] 36 36 0 76 36
[5,] 36 36 0 0 36
但是我觉得这个情况稍好一点。有没有可能在这个基础上改进,或者使用其他方法,得到类似于下面这样的结果:
[,1] [,2] [,3] [,4] [,5]
[1,] 237 237 255 34 237
[2,] 28 28 242 177 28
[3,] 36 36 0 76 36