jm2*_*22b 6 python scipy python-2.7
我正在使用scipy的curve_fit将函数拟合到一些数据,并收到以下错误;
Cannot cast array data from dtype('O') to dtype('float64') according to the rule 'safe'
Run Code Online (Sandbox Code Playgroud)
这将我指向代码中的这一行;
popt_r, pcov = curve_fit(
self.rightFunc, np.array(wavelength)[beg:end][edgeIndex+30:],
np.dstack(transmitted[:,:,c][edgeIndex+30:])[0][0],
p0=[self.m_right, self.a_right])
Run Code Online (Sandbox Code Playgroud)
rightFunc定义如下;
def rightFunc(self, x, m, const):
return np.exp(-(m*x + const))
Run Code Online (Sandbox Code Playgroud)
据我了解,“ O”类型是指python对象,但我看不到是什么导致了此错误。
完成错误:
为了深入探讨此问题,我有什么想法需要调查?
通常这些scipy函数需要如下参数:
curvefit( function, initial_values, (aux_values,), ...)
Run Code Online (Sandbox Code Playgroud)
其中元组与主变量的当前值一起aux_values传递给您。function
表情是dstack这样的吗aux_values?或者是几个的串联。它可能需要包裹在tuple.
(np.dstack(transmitted[:,:,c][edgeIndex+30:])[0][0],)
Run Code Online (Sandbox Code Playgroud)
我们可能需要确切地知道这个错误出现在哪里,而不仅仅是代码的哪一行造成的。我们需要知道正在转换什么值。哪里有 dtype 对象的数组?
只是澄清一下,我遇到了同样的问题,在自己解决之前没有在评论中看到正确的答案。所以我在这里重复一遍:
\n\n\n\n\n我已经解决了这个问题。我将一个包含一个元素的数组传递到 p0 列表,而不是元素本身。感谢您的帮助 \xe2\x80\x93 Jacobadtr 9 月 12 日 17:51
\n\n当从大小不同的子列表列表构造数组时,通常会产生 O dtype。如果 np.array(...) 无法创建一个干净的数字数组,它将诉诸于创建一个对象数组。\xe2\x80\x93 hpaulj 9 月 12 日 17:15
\n
也就是说,确保传递给 curve_fit 的参数元组可以正确转换为 numpy 数组
\n| 归档时间: |
|
| 查看次数: |
26752 次 |
| 最近记录: |