NumPy的新手可能没有正确搜索,所以如果这是一个常见问题,我会采取肿块...
我正在研究一个问题,我需要计算相对较大数字的log(n!) - 即.为了大计算阶乘,所以我写了以下函数:
def log_fact(n):
x = 0
for i in range(1,n+1):
x += log(i)
return x
Run Code Online (Sandbox Code Playgroud)
现在问题是我想将此作为传递给curve_fit的函数的一部分:
def logfactfunc(x, a, b, c):
return a*log_fact(x) + b*x + c
from scipy.optimize import curve_fit
curve_fit(logfactfunc, x, y)
Run Code Online (Sandbox Code Playgroud)
但是,这会产生以下错误:
File "./fit2.py", line 16, in log_fact
for i in range(1,n+1):
TypeError: only length-1 arrays can be converted to Python scalars
Run Code Online (Sandbox Code Playgroud)
一点点搜索建议numpy.frompyfunc()将其转换为ufunc
curve_fit(np.frompyfunc(logfactfunc, 1, 1), data[k].step, data[k].sieve)
TypeError: <ufunc 'logfactfunc (vectorized)'> is not a Python function
Run Code Online (Sandbox Code Playgroud)
试过这个:
def logfactfunc(x, a, b, c):
return …
Run Code Online (Sandbox Code Playgroud)