我正在使用py_tsg从Python调用稀疏网格生成器Tasmanian(用C ++编写)。 py_tsg网站表明我需要PyUblas和Boost.Python作为先决条件。我已经完成了所有设置,并且正在运行第一个示例问题,以确保一切都是犹太洁食(在前面给出的相同py_tsg链接上)。
所以,除了一件事之外,一切似乎都很好......塔斯马尼亚网格方法中的一个参数之间的类型不匹配:make_global_grid。具体来说,Python正在将一个整数的numpy.ndarray传递给pyublas :: numpy_vector,并且解释器不喜欢它。
这是来源:
import scipy, scipy.integrate, itertools
import pyublas
import _py_tsg as tsg
grid = tsg.TSG()
def fn1(x): return scipy.exp(-x[0]*x[0])*scipy.cos(x[1])
dimension = 2
outputs = 0
level = 7
grid.make_global_grid( dimension, outputs, level, tsg.TypeDepth.type_level, tsg.TypeOneDRule.rule_clenshawcurtis, scipy.array([], dtype=int), 0.0, 0.0 )
points = grid.get_points()
weights = grid.get_weights()
sum = scipy.sum( [w*fn1(x) for (x,w) in zip(points, weights)] )
print("\nExample 1")
print("grid has: %d points" % grid.get_num_points())
print("integral is: %.17f" % sum)
print("error: %.17f" % scipy.fabs( sum - 2.513723354063905e+00 ))
堆栈跟踪: Boost.Python.ArgumentError:Python中的参数类型 TSG.make_global_grid(TSG,int,int,int,TypeDepth,TypeOneDRule,numpy.ndarray,float,float) 与C ++签名不匹配: make_global_grid(TSG_Wrap {lvalue},int,int,int,TasGrid :: TypeDepth,TasGrid :: TypeOneDRule,pyublas :: numpy_vector,double,double)
答案 0 :(得分:0)
我发现Tasmanian在4.0或更高版本的C ++库中提供了一个Python包装器。如果遇到类似问题,请查看Tasmanian文档并使用TSG 4.0或更高版本...