我试图将Gower距离实现应用到我的 Dataframe 。虽然它可以顺利地处理具有更多特征的相同数据集,但这次当我调用Gower距离函数时,它会出错。我从同一目录中的另一个.py代码导入Gower的函数。下面是我的代码:
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import gower_function as gf
# Importing the dataset with pandas
dataset = pd.read_excel('input_partial.xlsx')
X = dataset.iloc[:, 1:].values
df = pd.DataFrame(X)
#obtaining gower distances of instances
Gower = gf.gower_distances(X)
在执行这个命令后,我得到了下面的错误:
File "<ipython-input-10-6a4c39600b0e>", line 1, in <module>
Gower = gf.gower_distances(X)
File "C:\Users\...\Clustering\Section 24 - K-Means
Clustering\gower_function.py", line 184, in gower_distances
X_num = np.divide(X_num ,max_of_numeric,out=np.zeros_like(X_num),
where=max_of_numeric!=0)
TypeError: ufunc 'true_divide' output (typecode 'd') could not be coerced to
provided output parameter (typecode 'q') according to the casting rule
''same_kind''
我不明白它是如何在只有较少特征(列)的同一数据集上给予此错误的。有没有人能认识到原因?
3条答案
按热度按时间r8uurelv1#
您需要指定左操作数的
dtype
为非整数,一些浮点类型,例如。如果
a
和b
中的dtype
都是整数,那么得到的错误是:ufunc true_divide没有找到匹配指定签名和转换的循环。如果
a
中的dtype
是整数,但b
是浮点数,那么得到的错误是:根据强制转换规则“same_kind”,无法将ufunc“true_divide”输出(类型代码“d”)强制为提供的输出参数(类型代码“l”)。qzwqbdag2#
我也遇到了同样的问题。看起来如果你所有的变量都是整数,那么它就会产生这个错误。所以我把每个整数列都改成了字符串值。
这似乎修复了错误。
ljo96ir53#
np.zeros_like(a)
创建一个与a
具有相同dtype的数组,如果它被用作out=
的numpy操作(如np.divide
,np.log
,np.exp
等)产生一个浮点数组,则dtype将不匹配;因此出现了错误。解决这个问题的一种方法是使用np.zeros(a.shape)
。或者将传递给
zeros_like
的数组的dtype更改为float(如Dan Oak所建议的)。