r-将spatstat函数转换为C++以避免内存限制



我正在使用spatstat来估计害虫从道路、高速公路和其他道路引入和传播的风险。然而,我相信我遇到了内存限制的问题;我的数据是大陆级别的,我的电脑只有16GB的内存。运行spatstat的as.owin()density.psp()功能时,我收到的警告消息是:

Error: cannot allocate vector of size X.X. Gb

我的一些同事建议我可以通过使用rcpp包将spatstat函数as.owin()density.psp()转换为通过C++执行来减轻内存负担。这项技术远远超出了我的舒适区,我希望在花很多时间研究它之前,能从StackOverflow那里了解一下它是否可行

具体来说,我的问题是:

  1. 有人把spatstat函数转换成C++了吗
  2. 其他spatstat用户是如何解决内存限制问题的

如有任何帮助和指导,我们将不胜感激。

非常感谢,

Josh

首先,我非常同意发帖者的说法,即快速解决方案不是编辑代码,而是向现有代码投入更多的计算资源。使用云计算服务可能很麻烦,但重新实现、测试和验证全新的源代码需要更多的时间。

但无论如何:

首先要检查的是,要创建的像素图像是否太大,根本无法存储在R内存中。尝试创建Z <- as.im(R, dimyx=d),其中R是包含空间域的矩形,d是所需图像的维度(行、列(。如果这条关于内存限制的信息失败了,那么你需要一艘更大的船——我的意思是,电脑。

函数density.psp具有选项method="FFT"(默认值(和CCD_ 11。这两种你都试过了吗?FFT方法使用更多的内存,因为它在一个巨大的傅立叶变换中完成整个计算(在将域扩展到其原始大小的几倍之后(。C方法是在所有像素和所有分段上的循环;它速度较慢,但除了用于输出光栅数据的存储之外,所需内存相对较少。如果method="C"由于内存不足而失败,这将再次表明您试图创建的光栅图像太大,无法存储在R内存中。

函数as.owin是通用的,有28个方法。哪种方法会给你带来麻烦?您将哪些数据转换为owin

spatstat已经被写入到RCC++的混合中。我们一直在寻找加速代码和减少内存需求的方法。如果您发现了代码缓慢的特定情况,我们希望了解详细信息。如果你发现了一种修复或加速某些代码的方法,请分享。

最新更新