R 中矩阵和/或空间数据(邻域统计)的高效移动窗口统计

发布于 2024-11-29 13:36:34 字数 910 浏览 1 评论 0原文

我正在使用 R 中的栅格和相关包来做一些遥感工作。对于我正在编写的许多函数,我希望快速计算邻域/移动窗口统计数据。不幸的是,我或其他人编写的任何 R 实现都非常非常慢。

我知道 caTools 包提供了用 C 语言编写的矢量/时间序列功能,可节省 10 倍以上的时间。有人熟悉为矩阵和空间数据提供此功能的类似包或函数吗?

简单示例:

# Generate a raster with random values
r <- raster(nrows=100, ncols=100)
values(r) <- rbinom(dim(r)[1] * dim(r)[2], 1, 0.1)

# Now generate a raster highlighting the original values plus immediate neighbors
# (By default ngb yields a queen-esque weighting system)
r.neighbor <- focal(r, ngb=3, fun=max)

# system.time() of the above function for a 100x100 raster takes 0.8 seconds on my laptop
# and takes over 15 seconds for a 1000x1000 raster

理想情况下,我希望更快地完成此操作并针对更大的栅格。

非常感谢, 尼克

Ps。这里有一些关于 R 函数在向量上进行移动窗口操作的巨大速度差异的有趣讨论:http://tolstoy.newcastle.edu.au/R/help/04/10/5161.html

I'm using the raster and related packages in R to do a bit of remote sensing work. For a number of the functions I'm writing, I'd love to rapidly compute neighborhood / moving window statistics. Unfortunately, any R implementations I or others write are very, very slow.

I know that the caTools package offers this functionality written in C for vectors / time series, which yields a 10X+ time savings. Is anyone familiar with a similar package or function that provides this functionality for matrices and spatial data?

Quick example:

# Generate a raster with random values
r <- raster(nrows=100, ncols=100)
values(r) <- rbinom(dim(r)[1] * dim(r)[2], 1, 0.1)

# Now generate a raster highlighting the original values plus immediate neighbors
# (By default ngb yields a queen-esque weighting system)
r.neighbor <- focal(r, ngb=3, fun=max)

# system.time() of the above function for a 100x100 raster takes 0.8 seconds on my laptop
# and takes over 15 seconds for a 1000x1000 raster

Ideally, I'd like to do this faster and for much larger rasters.

Much thanks,
Nick

Ps. There's some interesting discussion of the massive speed differences across R functions for doing moving window operations on vectors here: http://tolstoy.newcastle.edu.au/R/help/04/10/5161.html

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文