<p>我用了<code>python-boost</code>来实现这个目标。
检查这个函数:<a href="http://letslearncomputing.blogspot.com/2013/04/c-program-for-cubic-spline-interpolation.html" rel="nofollow">http://letslearncomputing.blogspot.com/2013/04/c-program-for-cubic-spline-interpolation.html</a>
你可以在这里得到你想要的5个值。在</p>
<p>您只需将代码修改为<code>C++</code>(而不是<code>C</code>)</p>
<pre><code>BOOST_PYTHON_MODULE(Spline)
{
import_array();
boost::python::numeric::array::set_module_and_type("numpy", "ndarray");
class_<Spline, Spline*>("Spline", init<>())
.def("spline", &Spline::spline)
;
}
</code></pre>
<p>因此在Python中可以使用:</p>
^{pr2}$
<p>Cpp等级:</p>
^{3}$
<p>然后在<code>boost::python::list Spline::spline(numeric::array& x_val, numeric::array& y_val, double p)</code>函数中得到:</p>
<pre><code>PyArrayObject* x_pyArr = (PyArrayObject*)PyArray_FROM_O(x_val.ptr());
PyArrayObject* y_pyArr = (PyArrayObject*)PyArray_FROM_O(y_val.ptr());
int size = *(x_pyArr->dimensions), i , j;
double* data_x = (double*)x_pyArr->data;
double* data_y = (double*)y_pyArr->data;
double h[NUMBER_OF_SAMPLES], a, b, c, d, s[NUMBER_OF_SAMPLES] = { 0 }, F[NUMBER_OF_SAMPLES], f[NUMBER_OF_SAMPLES], x[NUMBER_OF_SAMPLES], m[NUMBER_OF_SAMPLES][NUMBER_OF_SAMPLES] = { 0 }, temp;
for (int i = 0; i < size; i++)
{
x[i] = *(data_x + i);
f[i] = *(data_y + i);
}
</code></pre>
<p>依此类推。我在<code>Spline::spline</code>函数中返回一个python列表:</p>
<pre><code>boost::python::list return_val;
// ....
return_val.append(sum);
return_val.append(result);
return return_val;
</code></pre>