首页 > 解决方案 > 在 R 中高效执行复杂的 Python 代码

问题描述

我正在寻找一种在 R 中以快速灵活的方式执行 Python 代码的有效方法。

问题是我想从拓扑数据分析中执行一个特定的方法,称为持久同源性,你不需要详细了解它就可以理解我正在处理的问题。

问题是,在处理大型数据集时,计算持久同源性并不是最简单的事情,因为它需要大量的内存和计算时间。

然而,执行在 R 包TDA中实现的方法非常不方便:它从大约 800 个数据点开始崩溃,并且实际上不允许我使用近似算法。

相比之下,Python 包Ripser允许我在 Python 中轻松地对数千个点进行计算。此外,它还允许为更大的数据集提供一个近似结果的参数,并且还可以存储我想要的输出。总之,用这个包计算持久同源性要方便得多。

但是,由于我正在处理的所有其他内容都在 R 中,因此我也可以更方便地在 R 中执行来自 Ripser 包的代码。一个说明性的例子如下:

# Import R libraries

library("reticulate") # Conduct Python code in R
library("ggplot2") # plotting

# Import Python packages

ripser <- import("ripser") # Python package for computing persistent homology
persim <- import("persim") # Python package for many tools used in analyzing Persistence Diagrams

# Generate data on circle

set.seed(42)

npoints <- 200
theta <- 2 * pi * runif(npoints)
noise <- cbind(rnorm(npoints, sd=0.1), rnorm(npoints, sd=0.1))
X <- data.frame(x=cos(theta) + noise[,1], y=sin(theta) + noise[,2])

# Compute persistent homology on full data

PHfull <- ripser$ripser(X, do_cocycles=TRUE) # slow if X is large

# Plot diagrams

persim$plot_diagrams(PHfull$dgms) # crashes

现在我在使用这段代码时有两个问题:

标签: pythonr

解决方案


推荐阅读