这可能是一个很小的问题,但我遇到了它,并找到了一个解决方案,也许最终会对某些人有所帮助。基本上,我尝试使用以下代码通过R使用rpy2调用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不能使用它?也许是因为他们试图调用同一个库?
发布于 2021-03-07 04:21:15
这可能确实是Python和R使用的动态加载的库之间的冲突。一个这样的例子是scipy使用BLAS做看起来很奇怪的事情,这会导致崩溃:https://github.com/rpy2/rpy2/issues/505
不幸的是,我一点也不了解古迪。如果这是一个阻塞程序,你需要通过一个调试器来运行它,以找出它在C库中发生了什么。
https://stackoverflow.com/questions/66413674
复制相似问题