问题描述
这可能是一个非常小众的问题,但我遇到了它并找到了一个可能最终会帮助某人的解决方案。基本上,我正在尝试使用 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 库中发生的情况。