2011-12-04 78 views
-2

我一直試圖從這個列表中獲取mediana,這意味着列表的最短Euclidean distancePython:列表中的列表

我做了一個函數euclid,它返回2個向量之間的距離,不管它們的大小如何,但我有2個for循環的問題。

這個程序應該返回[1,2,3]

xs=[[1, 1, 1], [3, 2, 1], [1, 0, 3], [1, 2, 3], [4, 4, 4]] 
naj = 0 
vsota=0 
ys=[] 
for i,j in enumerate(xs): 
    for x,y in enumerate(xs): 
     if j!=y: 
      vsota=euclid(j,y) 

      print(vsota,"   ",j,y) 

但當前返回:

2.23606797749979    [1, 1, 1] [3, 2, 1] 
2.23606797749979    [1, 1, 1] [1, 0, 3] 
2.23606797749979    [1, 1, 1] [1, 2, 3] 
5.196152422706632    [1, 1, 1] [4, 4, 4] 
2.23606797749979    [3, 2, 1] [1, 1, 1] 
3.4641016151377544    [3, 2, 1] [1, 0, 3] 
2.8284271247461903    [3, 2, 1] [1, 2, 3] 
3.7416573867739413    [3, 2, 1] [4, 4, 4] 
2.23606797749979    [1, 0, 3] [1, 1, 1] 
3.4641016151377544    [1, 0, 3] [3, 2, 1] 
2.0        [1, 0, 3] [1, 2, 3] 
5.0990195135927845    [1, 0, 3] [4, 4, 4] 
2.23606797749979    [1, 2, 3] [1, 1, 1] 
2.8284271247461903    [1, 2, 3] [3, 2, 1] 
2.0        [1, 2, 3] [1, 0, 3] 
3.7416573867739413    [1, 2, 3] [4, 4, 4] 
5.196152422706632    [4, 4, 4] [1, 1, 1] 
3.7416573867739413    [4, 4, 4] [3, 2, 1] 
5.0990195135927845    [4, 4, 4] [1, 0, 3] 
3.7416573867739413    [4, 4, 4] [1, 2, 3] 

如何總結所有以[1,1開頭的數字, 1],[3,2,1] ...等,然後比較每個距離,然後返回索引與較低的總和?

+0

你解決這個問題?有沒有答案有用? – mac

回答

0

已經選中thisthis甚至this? 在stackoverflow或其他平臺上有很多解決方案,我相信你檢查了他們。那他們怎麼了?

+0

大聲笑我很抱歉我tottaly forogot檢查與歐氏距離作爲搜索參數。正如你所看到的,我甚至沒有在一個問題 – buco

+0

中使用它,現在我檢查了他們,那不是我所要求的。我知道如何獲得距離我的功能euclid做到了(我沒有發佈它的代碼) 問題是我如何得到列表裏面有最短歐幾里得距離的列表,我應該使用什麼條件。我應該清理每個列表的所有距離,然後選擇與其他人相比最短距離的列表。另外我沒有numpy模塊,據我所知我不應該需要它 – buco

0

你可以只使用兩個變量來跟蹤最低?

lowest_vsota = 0 
lowest_coord = [] 

然後在if塊...

if vsota < lowest_vsota: 
    lowest_vsota = vsota 
    lowest_coord = j