gpt4 book ai didi

python - 计算三种方法的欧氏距离

转载 作者:太空宇宙 更新时间:2023-11-04 11:09:49 24 4
gpt4 key购买 nike

我在计算欧氏距离时遇到问题。

后来我引用了这个函数,它给了我这个错误:

TypeError:输入类型不支持 ufunc 'bitwise_and',并且根据转换规则 ''safe'' 无法将输入安全地强制转换为任何受支持的类型

硬编码 K-means 算法需要它。

def euclideanDist(df,pointIDX,mean_1,mean_2,mean_3):

point = df.iloc[pointIDX][['Shoe_Size','Height']].values
mean_1 = mean_1[['Shoe_Size','Height']].values
mean_2 = mean_2[['Shoe_Size','Height']].values
mean_3 = mean_3[['Shoe_Size','Height']].values

dist_Total_1 = sum([a-b for a,b in zip(point,mean_1)])**2
dist_Total_2 = sum([a-b for a,b in zip(point,mean_2)])**2
dist_Total_3 = sum([a-b for a,b in zip(point,mean_3)])**2

if dist_Total_1 < dist_Total_2 & dist_Total_3:
df.loc[pointIDX,'class'] = 1

elif dist_Total_2 < dist_Total_3 > dist_Total_1:
df.loc[pointIDX, "class"] = 2

else:
df.loc[pointIDX,'class'] = 3

return df

最佳答案

你这里有一些语法问题

if dist_Total_1 < dist_Total_2 & dist_Total_3: 
df.loc[pointIDX,'class'] = 1

elif dist_Total_2 < dist_Total_3 > dist_Total_1:
df.loc[pointIDX, "class"] = 2

我相信你真正想要的是

if dist_Total_1 < dist_Total_2 and dist_Total_1 < dist_Total_3: 
df.loc[pointIDX,'class'] = 1

elif dist_Total_2 < dist_Total_3 and dist_Total_2 < dist_Total_1:
df.loc[pointIDX, "class"] = 2

您的距离计算似乎也不符合我对欧氏距离的理解。也许是这样

dist_Total_1 = sum([(a-b)**2 for a,b in zip(point,mean_1)])**0.5

dist_Total_2dist_Total_3 依此类推。

关于python - 计算三种方法的欧氏距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58560717/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com