使用PyUblas,Boost.Python和py_tsg从python访问Tasmanian Sparse Grid。在make_global_grid的参数中键入不匹配

时间:2017-11-15 02:12:40

标签: python c++ numpy boost

我正在使用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)

1 个答案:

答案 0 :(得分:0)

我发现Tasmanian在4.0或更高版本的C ++库中提供了一个Python包装器。如果遇到类似问题,请查看Tasmanian文档并使用TSG 4.0或更高版本...