奇怪的 GUDHI + rpy2 交互

问题描述

这可能是一个非常小众的问题,但我遇到了它并找到了一个可能最终会帮助某人的解决方案。基本上,我正在尝试使用 rpy2 使用以下代码通过 R 调用 GUDHI C++ 库:

import gudhi
import rpy2.robjects.packages as rpackages
import rpy2.robjects.vectors as rvectors
import rpy2.robjects as robjects
import rpy2.robjects.numpy2ri
import numpy as np


point_cloud = np.random.uniform(0,10,size=(30,3))
# tda.point_cloud_to_pl(point_cloud,method="GUDHI_R")
rpy2.robjects.numpy2ri.activate()

# import R's "base" package
base = rpackages.importr('base')

# import R's "utils" package
utils = rpackages.importr('utils')

# select a mirror for R packages
utils.chooseCRANmirror(ind=1) # select the first mirror in the list

# R package names
packnames = ('TDA','deldir','Matrix','SparseM')
names_to_install = [x for x in packnames if not rpackages.isinstalled(x)]
if len(names_to_install) > 0:
    utils.install_packages(rvectors.StrVector(names_to_install))

# Importing packages
rpackages.importr('TDA')
rpackages.importr('deldir')
rpackages.importr('Matrix')
rpackages.importr('SparseM')

X = robjects.r.assign("X",point_cloud)
alpha_complex_diag = robjects.r['alphaComplexDiag']
ph_output = alpha_complex_diag(X)
print(ph_output)

但不断收到分段错误错误提示

 *** caught segfault ***

R[write to console]: address 0x7fa6ac2c6090,cause 'invalid permissions'

解决办法是去掉python脚本顶部的import gudhi。出于某种原因导致R无法使用它?也许是因为他们试图调用一个库?

解决方法

这可能确实是 Python 和 R 使用的动态加载库之间的冲突。一个这样的例子是 scipy 用 BLAS 做了一些看起来很奇怪的事情,这会导致崩溃:https://github.com/rpy2/rpy2/issues/505

不幸的是,我根本不了解 GUDHI。如果这是一个阻止程序,您需要通过调试器运行它以查找它在 C 库中发生的情况。