使用 PyUblas、Boost.Python 和 py_tsg 从 python 访问塔斯马尼亚稀疏网格.make_g

Accessing Tasmanian Sparse Grid from python using PyUblas, Boost.Python and py_tsg. Type mismatch in arguments for make_global_grid

本文关键字:马尼亚 访问塔 make 网格 python Boost PyUblas Python tsg py 使用      更新时间:2023-10-16

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

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