모두. boost :: python을 사용하여 * .pyd 파일로 내 보낸 함수의 최소값을 찾으려고합니다.부스트 :: 파이썬 기능을 가진 Scipy
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.minimize 일상에서 내 C++ 함수에 직접 ndarray을 통과 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 시도와 라인
#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
에 실패합니다. (KVOR은 set_const 클래스에서 상속되며 문제가되지 않습니다.)
나는 return map(lambda z: function(z, *args), x)
으로 바꾸려고했으나 목록 (ndarrays)이 여기에 x
으로 전달되었을뿐만 아니라 스칼라로도 보이기 때문에 map은 오류를보고합니다.
try:
it = iter(x)
except TypeError:
return function(x, *args)
return map(lambda z: function(z, *args),x)
을하지만 optimize.py
다른 장소에 실패
File "C:\Python27\lib\site-packages\scipy\optimize\optimize.py", line 589, in approx_fprime grad = numpy.zeros((len(xk),), float) TypeError: object of type 'numpy.float64' has no len()
내가있어 이 같은 몇 가지 문제는 scipy
의 기능을 기억하지 못하지만 map
을 사용하여 해결할 수 있습니다. 그것은 모든 scipy 기능의 일반적인 문제입니까? 그리고이 경우 어떻게해야합니까?