首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算矩阵中各元素近邻标准差的有效方法

计算矩阵中各元素近邻标准差的有效方法
EN

Stack Overflow用户
提问于 2017-06-21 06:22:46
回答 1查看 322关注 0票数 1

我想计算矩阵中每个元素的最近邻(3*3移动窗口)的标准差。我在R中编写了一些代码来实现它:

代码语言:javascript
复制
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)

但是速度太慢了。你能给我一些提速的建议吗?还有其他方法来实现它吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-21 11:57:44

正如@romanlustrik在他的评论中提议的那样,我们可以使用raster::focal()来解决这个问题。

代码语言:javascript
复制
library(raster)

df <- matrix(1:10000, nrow = 100, ncol = 100, byrow = TRUE)
dfR <- raster(df)

dfSD <- as.matrix(focal(dfR, w = matrix(1,3,3), fun = sd))

其中,w是一个矩阵,表示最近的邻居及其在fun中的权重(在本例中,3x3是单元本身,它是8个邻居)。因此,任何邻域模式都是可以想象的,只要它可以用矩阵来表示。

代码语言:javascript
复制
matrix(1,3,3)
#      [,1] [,2] [,3]
# [1,]    1    1    1
# [2,]    1    1    1
# [3,]    1    1    1

一个只有4个邻居(不包括对角线和单元格本身)的示例:

代码语言:javascript
复制
matrix(c(0,1,0,1,0,1,0,1,0), 3, 3)
#      [,1] [,2] [,3]
# [1,]    0    1    0
# [2,]    1    0    1
# [3,]    0    1    0
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44668246

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档