我有一个数据框,其中行表示对象,列表示对象特征
我试图计算对象的余弦相似性,当我运行代码时,它似乎工作得很好,但是当我对距离进行排序时,壁橱对象的距离都是0,这只有在它们的向量相同时才可能,但事实并非如此
I,查看数据输出,似乎任何精度超过E-16的数字都会变成0(在终端打印输出和csv文件输出中都显示为0)
这些列是64格式的
如何显示更高的精度
以下是我正在运行的代码供参考:
import pandas as pd
from scipy.spatial.distance import pdist
from scipy.spatial.distance import squareform
dfe = pd.read_csv('file.csv')
dfe = dfe.set_index('object')
dfe = dfe.fillna(dfe.mean())
pairwise = pd.DataFrame(squareform(pdist(dfe, metric='cosine')),columns = dfe.index,index = dfe.index)
long_form = pairwise.unstack()
long_form.index.rename(['object_1', 'object_2'], inplace=True)
long_form = long_form.to_frame('distance').reset_index()
如果您的意思是当您尝试获取两个元素之间的差异时得到
0
,当元素之间的差异小于1e-16
时得到0,那么这就是float64精度限制。参见示例print(1+1e-16)
。有关这方面的信息可以使用numpy.finfo(numpy.float)
获得您应该尝试使用更高精度的数据类型。 例如:
如果
squareform
的结果仍然是float64
数据类型,则应update将scipy库更新到更高版本相关问题 更多 >
编程相关推荐