You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用Gower距离函数遇TypeError类型不匹配错误求助

问题分析与修复方案

我来帮你拆解这个问题——其实核心是数据类型不匹配的小坑,在你减少特征之后暴露出来了。

为什么减少特征会触发错误?

先看报错信息的关键部分:TypeError: ufunc 'true_divide' output (typecode 'd') could not be coerced to provided output parameter (typecode 'q')
这里的'd'代表浮点数(float64),'q'代表整数(int64)。原因很简单:

  • 你之前的数据集包含更多特征,其中应该混合了整数和浮点类型的特征,所以函数里处理数值特征的X_num数组是浮点类型,np.zeros_like(X_num)生成的也是浮点数组,除法后的浮点数结果可以正常存入。
  • 但减少特征后,剩下的所有数值特征都是整数类型,导致X_num变成了整数数组,np.zeros_like(X_num)生成的也是整数数组。而np.divide执行除法必然会输出浮点数,Python的same_kind类型转换规则不允许把浮点数强行存入整数数组,所以直接报错了。

两种快速修复方法

方法1:在调用函数前转换数据类型

在传入gower_distances之前,把你的输入数组X转换成浮点类型,这样函数内部的X_num也会是浮点数组,类型就匹配了:

# 转换X为float64类型后再传入
Gower = gf.gower_distances(X.astype(np.float64))

方法2:修改gower_function.py的代码

找到报错的第184行,把生成输出数组的部分改成强制浮点类型,不管输入是整数还是浮点都能适配:

# 替换原来的行,明确指定dtype为float64
X_num = np.divide(X_num ,max_of_numeric,out=np.zeros_like(X_num, dtype=np.float64), where=max_of_numeric!=0)

验证你的数据集类型

你可以先确认一下现在的X数据类型,验证这个分析:

print(X.dtype)

如果输出是int64,就完全符合我们的判断——之前的数据集因为有浮点特征,X.dtype是float64,所以没触发这个问题。

内容的提问来源于stack exchange,提问作者Beg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:44:34