带提升功能的 Scipy::p ython 函数
Scipy with boost::python functions
everyone.我尝试使用 boost::p ython 在 *.pyd 文件中导出的最少函数。
def SaturationDensity(C):
return optimize.minimize(lambda z:SNM_BED(z, C), 1.0)
def SNM_BED(n, C):
return eos.t_E(0.5*n, 0.5*n, C)/(Dim*n) - m_n
其中 eos 是模块的名称。在scipy.optimize.最小化例程中,它在行中失败
#optimize.py
def wrap_function(function, args):
ncalls = [0]
def function_wrapper(x):
ncalls[0] += 1
return function(x, *args) # <---Here
return ncalls, function_wrapper
与Boost.Python.ArgumentError:Python argument types in eos.t_E(numpy.ndarray, numpy.ndarray, KVOR) did not match C++ signature: t_E(double, double, class set_const *)
因此,Scipy尝试将NDarray直接传递给我的C++函数。(KVOR是从set_const类继承而来的,这不是问题)。
我试图用return map(lambda z: function(z, *args), x)
替换return function(x, *args)
,但似乎不仅列表(ndarray)作为x
传递到这里,而且标量也传递,所以map报告了一个错误。
我还尝试使用以下代码检查 x 是否可迭代:
try:
it = iter(x)
except TypeError:
return function(x, *args)
return map(lambda z: function(z, *args),x)
但它在optimize.py
的另一个地方失败了:
File "C:Python27libsite-packagesscipyoptimizeoptimize.py", line 589, in approx_fprime
grad = numpy.zeros((len(xk),), float)
TypeError: object of type 'numpy.float64' has no len()
我遇到了一些这样的问题,我不记得scipy
哪个功能,但我可以使用map
来解决它。这是所有 scipy 函数的常见问题吗?在这种情况下该怎么办?
只需在SNM_BED例程之上添加n = float(n)
即可。
通常,1 元素 ndarray 会在需要时自动转换为浮点数,但 boost::p ython 似乎太挑剔了。
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- C++模板来检查友元函数的存在
- 递归函数计算序列中的平方和(并输出过程)
- 对RValue对象调用的LValue ref限定成员函数
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 传递 boost::p ython::numpy::ndarray 作为 boost::p ython 函数的(默认或非
- 如何通过 boost::p ython 重命名构造函数的关键字参数
- 如何正确访问结构值并将其传递给函数 - boost::p ython
- 可以提升::p ython将对象的所有权传递给python回调函数
- boost::p ython 纯虚拟基类,具有静态工厂构造函数和 std::unique_ptr
- 带提升功能的 Scipy::p ython 函数
- 递增由向 boost::p ython 公开的构造函数创建的对象的引用计数
- boost::p ython:编译失败,因为复制构造函数是私有的
- 提升::p ython 受保护的析构函数问题
- 使用 boost::p ython 将虚拟成员函数从 C++ 公开到 Python
- 无法使用 boost::p ython 更改传递给 python 函数的对象
- C++析构函数调用 boost::p ython 包装的对象