我有两个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似乎忽略了这些掩码。在
执行此操作的有效方法是什么?在
最简单的方法是使用标准的欧几里德距离公式,但将}
sum
替换为^{我怀疑你会得到比这更简单的东西(你必须自己计算广播,因为你只提供1d输入)。标准做法是
nan
总是通过计算进行的。在根据@Daniel F的建议,您可以使用cdist,如下所示:
例如:
^{pr2}$输出:
上面的例子只是为了演示lambda函数的效果。在
相关问题 更多 >
编程相关推荐