scipy.pdist()返回NaN值

时间:2017-11-15 16:48:23

标签: python nan correlation pearson-correlation pdist

我试图对时间序列进行聚类。簇内元素具有相同的形状但不同的比例。因此,我想使用相关性度量作为聚类的度量。我尝试相关或皮尔森系数距离(欢迎提出任何建议或替代方案)。 但是,当我运行Z = linkage(dist)时,以下代码返回错误,因为dist中有一些NaN值。 time_series中没有NaN值,这由

确认
np.any(isnan(time_series))

返回False

from scipy.spatial.distance import pdist
from scipy.cluster.hierarchy import dendrogram, linkage

dist = pdist(time_series, metric='correlation') 
Z = linkage(dist)
fig = plt.figure()
dn = dendrogram(Z)
plt.show()

作为替代方案,我将使用皮尔森距离

from scipy.stats import pearsonr

def pearson_distance(a,b):
    return 1 - pearsonr(a,b)[0]

dist = pdist(time_series, pearson_distance)`

但这会产生一些运行时警告并花费大量时间。

1 个答案:

答案 0 :(得分:1)

scipy.pdist(time_series, metric='correlation')

如果您查看manual,则correlation选项除以差异。因此,您可能有两个相同的时间戳,zero除以zero给我们NaN