0

我的目标是在 Julia中复制pdist()from的功能。SciPy我尝试使用Distances.jl包对观察之间的距离进行成对计算。但是,结果与下面提到的示例中看到的不同。

蟒蛇示例:

from scipy.spatial.distance import pdist
a = [[1,2], [3,4], [5,6], [7,8]]
b = pdist(a)
print(b)

output --> array([2.82842712, 5.65685425, 8.48528137, 2.82842712, 5.65685425, 2.82842712])

朱莉娅示例:

using Distances
a = [1 2; 3 4; 5 6; 7 8]
dist_function(x)  = pairwise(Euclidean(), x, dims = 1)
dist_function(a)

output --> 
4×4 Array{Float64,2}:
 0.0      2.82843  5.65685  8.48528
 2.82843  0.0      2.82843  5.65685
 5.65685  2.82843  0.0      2.82843
 8.48528  5.65685  2.82843  0.0

参考上面的例子:

  1. pdist()来自SciPypython 的度量值是否默认设置为Euclidean()
  2. 我该如何解决这个问题,在 Julia 中复制结果?

请提出解决此问题的解决方案。

pdist() 的文档参考:--> https://docs.scipy.org/doc/scipy/reference/generated/scipy.spatial.distance.pdist.html

提前致谢!!

4

2 回答 2

1

根据您链接的文档页面,要从 python 中获取与 Julia 相同的表单(是的,我知道,这与您的问题相反),您可以将其传递给 squareform。即在您的示例中,添加

from scipy.spatial.distance import squareform
squareform(b)

另外,是的,从同一个文档页面中,您可以看到如果没有明确定义,“metric”参数默认为“euclidean”。

对于相反的情况,只需注意 python 向量只是非对角线中的所有元素(因为对于“适当的”距离度量,得到的距离矩阵是对称的)。

因此,您可以简单地将所有非对角线元素收集到一个向量中。

于 2021-02-17T08:38:26.467 回答
1

对于(1),根据您链接的文档,答案是肯定的,在顶部说

scipy.spatial.distance.pdist(X, metric='euclidean', *args, **kwargs)

表明metricarg 确实'euclidean'默认设置为。

我不确定我是否理解您的第二个问题-结果是否相同?对我来说唯一的区别似乎是 scipy 将上三角形作为向量返回,所以如果只是这样做,请查看:https ://discourse.julialang.org/t/vector-of-upper-triangle/ 7764

于 2021-02-17T08:38:51.893 回答