2016-09-20 86 views
0

我有一個包含(x,y)的二維數組列表,但是我想根據最小值方程((x^2 + y^2)的平方根) )。按數學公式排序二維數組

例如,我有這四個二維列表:

(20,10) 
(3,4) 
(5,6) 
(1.2,7) 

如果我採取在此列表中的每個2D陣列的平方根,並返回最小的排序列表,輸出是:

(3,4) 
(1.2,7) 
(6.5,4) 
(5,6) 
(20,10) 

的代碼:

M=[ [20,10],[3,4],[5,6],[1.2,7],[6.5,4]] 

S = np.sqrt(M)

一個= []

打印■

對於i在範圍(0,h)的:

for j in range(0,w): 

    a[i] =s[i][j]+a[i] 

任何想法?

+1

你嘗試過什麼?我會開始[這個問題上排序列表](http://stackoverflow.com/questions/4174941/how-to-sort-a-list-of-lists-by-a-specific-index-of內部列表),並特別注意關鍵功能 – JGreenwell

+0

其實我在Arduino上啓動並轉換它,並且我想用Python轉換它 –

+0

Java會使用Comparator或者只是實現Comparable接口 - Python會使用sorted (或只是排序方法)或使用循環,所以你怎麼試圖做到這一點? – JGreenwell

回答

0

你的數據結構切換到一個元組列表,然後排序使用最小的值作爲鍵功能(帶記憶化的效率):

M = [(20, 10), (3, 4), (5,6), (1.2, 7), (6.5, 4)] 

def minimum_value(coordinate, dictionary={}): # intentional dangerous default value 
    if coordinate not in dictionary: 
     dictionary[coordinate] = coordinate[0]**2 + coordinate[1]**2 

    return dictionary[coordinate] 

M_sorted = sorted(M, key=minimum_value) 

print(M_sorted) 

輸出

[(3, 4), (1.2, 7), (6.5, 4), (5, 6), (20, 10)] 

由於我們只是排序,所以我們不需要計算平方根,正方形就足夠了。

+0

現在在實時我有一個從圖像(x,y)打印出來的列表,我希望它像這樣排序算法Algourithm自動當eny新座標添加到此列表 –

+0

@HamoodElholandy,如果我理解你的話,那聽起來像是製作一個好的跟進SO問題。你應該包括你迄今爲止已經實現的代碼和指向這個問題的指針以提供上下文。 – cdlane

+0

這裏是代碼 :HTTPS://drive.google.com/file/d/0B0om5UtdFzWJd3VjNEVwVGxvWHc/view USP =共享 以下是錯誤: https://drive.google.com/file/d/ 0B0om5UtdFzWJcG9CdGNqclBoZWM /視圖?USP =共享 –

0

下面的代碼將解決您的要求,如果您想了解訂購的工作原理,請取消打印聲明的註釋!

import math 
array = [(20,10), (3,4), (5,6), (1.2,7)] 
sortList = [] 
count = 0 
tempList = [] 
placeholder = [] 
#Compute the Equation of Minimum Value 
for x,y in array: 
    tempList.append(math.sqrt((x**2) + (y**2))) 
    tempList.append(array[count]) 
    sortList.append(tempList) 
    tempList = [] 
    count += 1 
#Sort list 
count = 1 
placeholder = sortList[0][:] 
##print('ORIGINAL LIST\n', sortList) 
while count < (len(sortList)): 
    if sortList[count - 1][0] < sortList[count][0]: 
##  print('THIS IS COUNT', count) 
     count += 1 
    else: 
     placeholder = sortList[count - 1][:] 
##  print("this is placeholder: ", placeholder) 
     sortList[count - 1] = sortList[count] 
##  print(sortList) 
     sortList[count] = placeholder 
##  print(sortList) 
     placeholder = [] 
     count = 1 
+0

我的排序方法需要一段時間才能記住大列表! – BLang

+0

這個特定的評論「這個循環將計算存儲在變量事實中的因子」,以確認我對一般意見的價值的信念...... – cdlane

+0

bahaha我忘了帶出來,它是從我以前發誓的另一個問題的答案! !運行我的代碼,它的工作原理! – BLang

1

使用內置在列表的排序方法:

from math import sqrt 

def dist(elem): 
    return sqrt(pow(elem[0], 2) + pow(elem[1], 2)) 

def sorting_func(first, second): 

    if dist(first) < dist(second): 
     return 1 
    elif dist(second) < dist(first): 
     return -1 
    else: 
     return 0 

bla= [(3, 2), (5, 4)] 

bla.sort(sorting_func) 

print bla 
+0

可能不是一個好主意來命名變量' tuple'。 – cdlane

+0

現在在實時我有一個列表,從圖像(x,y)打印出來的一些對象eny方式這個列表可以添加或刪除eny座標對象,我希望它像這樣排序Algourithm自動添加eny新座標時列表 –

+0

當我把你的偉大Algourithm在我的代碼列表中我有這個錯誤:s.sort(sorting_func) AttributeError:'元組'對象沒有屬性'排序' –