簡體   English   中英

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

[英]Alternate approach for pdist() from scipy in Julia?

我的目標是從SciPy中的 SciPy 復制pdist()的功能。 我嘗試使用Distances.jl package 對觀測值之間的距離進行成對計算。 但是,結果與下面提到的示例中看到的不同。

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, 5.65685425, 2.82842712])

Julia 示例:

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 中的SciPypdist()是否默認將度量值設置為Euclidean()
  2. 我該如何解決這個問題,以復制 Julia 中的結果?

請提出解決此問題的解決方案。

pdist() 的文檔參考:--> https://docs.scipy.org/doc/scipy/reference/generated/scipy.spatial.distance.pdist.ZFC35FDC70D5FC69D269883A8

提前致謝!!

根據您鏈接的文檔頁面,要從 python 獲得與 Julia 相同的表格(是的,我知道,這與您的問題相反),您可以將其傳遞給 squareform。 即在您的示例中,添加

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

另外,是的,從同一個文檔頁面中,您可以看到如果沒有明確定義,“metric”參數默認為“euclidean”。

對於相反的情況,只需注意 python 向量就是非對角線中的所有元素(因為對於“適當的”距離度量,得到的距離矩陣是對稱的)。

因此,您可以簡單地將所有非對角線元素收集到一個向量中。

對於(1),根據您鏈接的文檔,答案是肯定的,在頂部說

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

表明metric arg 確實默認設置為'euclidean'

我不確定我是否理解您的第二個問題-結果是否相同? 對我來說唯一的區別似乎是 scipy 將上三角形作為向量返回,所以如果只是這樣做,請查看:https://discourse.julialang.org/t/vector-of-upper-triangle/ 7764

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM