我有一个相对较大的阵列(242x240x2922)。前两个维度是纬度和经度,第三个维度是时间(每日卫星图像)。
我需要提取该数组子集的相关系数,该子集对应于每个(lon,lat)对的6°半径内的数据。首先,我创建了一个循环来计算每个lon,lat对的圆多边形。然后,我检查了圆圈内的哪些点(使用point.in.polygon函数),并提取了较大数组的子集。
我知道我可以构建第二个嵌套循环,它可以计算每个lon的时间序列的相关性,lat与“子阵列”的其余时间序列(落在圆圈内),但是这将花费太长时间......是否有任何直接的方法来计算大小为“L”的向量与具有NxMxL维度的数组的每个向量的相关系数?例如,在循环中,第一轮将计算cor(myvector,myarray [,, 1])。
我尝试使用apply(myarray,dim = 3,cor),但我很难理解结果。
提前多多感谢。
答案 0 :(得分:1)
#define dimensions
M = 3; N = 4; L = 5
myarray <- array(data = rnorm(M*N*L), dim=c(M,N,L))
myvector <- myarray[1,1, ]
# Use apply function to cycle through all the vectors in 3rd dimension:
result <- apply(myarray, c(1,2), FUN=function(x)cor(myvector,x))
result
# [,1] [,2] [,3] [,4]
#[1,] 1.00000000 0.73804476 0.7356366 -0.1583484
#[2,] 0.03820936 -0.07797187 0.3798744 -0.4925700
#[3,] -0.52827708 -0.09036006 0.1895361 -0.2860481
# For testing compare with the loop result (which will be much slower for larger arrays):
for (i in 1:dim(myarray)[1])
for (j in 1:dim(myarray)[2])
print( cor(myvector,myarray[i,j,]))
# [1] 1
# [1] 0.7380448
# [1] 0.7356366
# [1] -0.1583484
# [1] 0.03820936
# [1] -0.07797187
# [1] 0.3798744
# [1] -0.49257
# [1] -0.5282771
# [1] -0.09036006
# [1] 0.1895361
# [1] -0.2860481