调用scipy.stats.gaussian_kde报TypeError: No loop matching the specified signature错误
报错原因分析
该TypeError的核心触发原因是传入gaussian_kde的numpy数组数据类型为object,而非浮点、整数等原生数值类型。scipy的核密度估计函数内部需要执行大量数值算术运算,object类型的数组元素无法直接参与numpy的通用函数(ufunc)运算,因此触发了类型不匹配的报错。
解决方法
- 首先将
object类型的numpy数组转换为数值类型(常规使用float64即可),转换后再调用gaussian_kde即可正常运行,转换代码如下:
data = data.astype(np.float64)
- 如果转换过程中抛出新的报错,说明原始数组中混入了非数值元素(比如字符串、空值None等),需要先完成数据清洗,过滤或替换无效值后再执行类型转换。
完整修复后的可运行代码
import numpy as np from scipy.stats import gaussian_kde data = np.array([0.056004922086, -0.067110140912, 0.047649429128, 0.013352490798, 0.056957475051, 0.064815486825, 0.042257559312, 0.049155256114, -0.002745214579, -0.034729529946, -0.0087654892625, 0.001477248489, 0.089200991785, 0.061195174967, 0.015295170704, 0.00080743905519, 0.048158569509, 0.034026643059, 0.037892055914, 0.017979245009], dtype=object) # 修复步骤:转换为float64数值类型 data = data.astype(np.float64) kde = gaussian_kde(data)
内容的提问来源于stack exchange,提问作者Xunny
相关产品推荐
相关产品推荐

