在scipy中为pdist指定缺失值

时间:2012-08-09 21:50:59

标签: python numpy matplotlib scipy

在scipy中调用pdist时如何指定缺失值?即这里描述的功能:

http://docs.scipy.org/doc/scipy/reference/generated/scipy.spatial.distance.pdist.html

例如,如果你有:

pdist(X, "euclidean")

X可能包含字符串"NA"等缺失值,您希望在X列之间的成对比较中排除这些值。我正在寻找的行为是在X中获取任何一对列之间的欧氏距离时不考虑缺失值。

1 个答案:

答案 0 :(得分:1)

最好的方法是用np.nan填充你的X数组,以排除要点。例如,假设具有X a(10,2)数组的2D情况:

import numpy as np
X = np.random.rand(10, 2)

假设您要从计算中排除X [7]:

X[7] = np.nan
my_dist = pdist(X, "euclidean")

然后,你会看到my_dist对于涉及计算与被排除元素的距离的对有'nan'。您可以排除多个元素。

更好的想法是使用numpy蒙版数组,但是pdist忽略了蒙版数组并且仍然使用数据。但是,一旦输出my_dist,就可以将它转换为一个屏蔽数组,这样nans就不会妨碍未来的数组操作:

my_dist = np.ma.array(my_dist, mask = ~np.isfinite(my_dist))