Ich verwende py_tsg, um den Sparse-Grid-Generator Tasmanian (in C++ geschrieben) von Python aus aufzurufen. Die py_tsg Website zeigt an, dass ich PyUblas und Boost.Python als Voraussetzungen benötige. Ich habe das alles eingerichtet und führe das erste Beispielproblem durch, um sicherzustellen, dass alles koscher ist (auf dem gleichen py_tsg Link, der vorher gegeben wurde).Zugriff auf Tasmanian Sparse Grid von Python mit PyUblas, Boost.Python und py_tsg. Typenkonflikt in Argumenten für make_global_grid
Also scheint alles in Ordnung zu sein, außer einer Sache ... ein Typ stimmt nicht überein zwischen einem der Argumente in der Tasmanian Grid-Methode: make_global_grid. Insbesondere übergibt Python ein numpy.darray von ints an einen pyublas :: numpy_vector und der Interpreter mag es nicht.
Hier ist die Quelle:
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))
Und der Stack-Trace: Boost.Python.ArgumentError: Python Argumenttypen in TSG.make_global_grid (TSG, int, int, int, TypeDepth, TypeOneDRule, numpy. ndarray, float, float) nicht C++ Signatur entsprechen: make_global_grid (TSG_Wrap {L-Wert}, int, int, int, TasGrid :: TypeDepth, TasGrid :: TypeOneDRule, pyublas :: numpy_vector, double, double)