Python中两组缺失值点之间的快速欧几里德距离

2024-04-26 01:11:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个numpy矩阵X和Y,分别代表某个d维空间中的一组点。我想计算从X的每个点到Y中的每个点的所有欧几里德距离。我希望distance操作忽略NaN条目,例如,如果我在计算以下两点之间的距离

a = [1, 3, nan]
b = [2, nan, 4]

然后我将忽略第二和第三维度,从而得到sqrt((1-2)**2) = 1的距离。在

不幸的是,在这种设置中,每当在一对点中找到单个NaN时,cdist只返回一个NaN距离。euclidean_distances function in scikit-learn也一样

当然,我们可以编写一个双循环来执行所有必需的操作,但是由于X和Y都是大矩阵,所以速度太慢了。因此,基于numpy/scipy的解决方案是理想的。在

numpy确实包含一些机制,比如masked arrays,这些机制允许执行忽略NaN值的操作,但是scipy似乎忽略了这些掩码。在

执行此操作的有效方法是什么?在


Tags: numpy距离条目代表矩阵scipysqrtnan
2条回答

最简单的方法是使用标准的欧几里德距离公式,但将sum替换为^{}

np.sqrt(np.nansum((X - Y)**2))

我怀疑你会得到比这更简单的东西(你必须自己计算广播,因为你只提供1d输入)。标准做法是nan总是通过计算进行的。在

根据@Daniel F的建议,您可以使用cdist,如下所示:

cdist(XA, XB, lambda u, v: np.sqrt(np.nansum((u-v)**2)))

例如:

^{pr2}$

输出:

1.0

上面的例子只是为了演示lambda函数的效果。在

相关问题 更多 >

    热门问题