微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

来自 Julia 中 scipy 的 pdist() 的替代方法?

如何解决来自 Julia 中 scipy 的 pdist() 的替代方法?

我的目标是在 Julia 中从 pdist() 复制 SciPy功能。 我尝试使用 distances.jl 包来执行观察之间距离的成对计算。然而,结果与下面提到的例子中看到的不同。

Python 示例:

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,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. python 中来自 pdist()SciPy 是否认将度量值设置为 Euclidean()
  2. 我该如何解决这个问题,在 Julia 中复制结果?

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

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

提前致谢!!

解决方法

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

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

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

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

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

,

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

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

表明 metric 参数确实默认设置为 'euclidean'

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。