【发布时间】:2017-11-23 21:27:42
【问题描述】:
我想计算矩阵中每个元素的最近邻(3*3 移动窗口)的标准差。我在 R 中编写了一些代码来实现它:
library(FNN)
df <- matrix(1:10000, nrow = 100, ncol = 100, byrow = TRUE)
df_ <- reshape2::melt(df)
df_index <- df_[, c(1,2)]
df_query <- df_index
neighbor_index <- knnx.index(df_index, df_query, k = 9, algorithm = 'kd_tree')
neighbor_coor<- apply(neighbor_index, 1, function(x) df_query[x, ])
neighbor_sd <- lapply(neighbor_coor, function(x) sd(df[x[, 1], x[, 2]]))
sd <- do.call(rbind, neighbor_sd)
但是速度太慢了。您能给我一些建议以加快速度吗?还有其他方法可以实现吗?
【问题讨论】:
-
我确信
data.table可以解决这个问题,但是您考虑过raster包吗?也许它可能会有所帮助。 stackoverflow.com/questions/24068509/… -
谢谢!你会写一个简短的代码吗?我会接受它作为答案。
标签: r performance matrix standard-deviation