[英]How to sort two-dimensional array in python
Tool = [[0 for x in xrange(3)] for y in xrange(len(xTool)-1)]
for l in xrange((len(xTool) - 1)):
Tool[l][0] = yTool[l]; Tool[l][1] = xTool[l]; Tool[l][2] = zTool[l]
我從點坐標開始,這是3個列表(xTool,yTool,zTool),分別代表我所有點的x,y和z坐標。
此處的目的是創建一個由3列和許多行(超過10,000個)組成的矩陣,其中每一行代表該點的3個坐標。 我要做的下一步是這樣的向量轉換:( 僅當您真的想了解我在做什么時,這才具有次要的重要性
rTool = numpy.zeros_like(Tool)
for rt in xrange((len(xTool) - 1)):
rTool[rt][0] = (Tool[rt][0] * cos(angle)) - (Tool[rt][1] * sin(angle))
rTool[rt][1] = (Tool[rt][0] * sin(angle)) + (Tool[rt][1] * cos(angle))
rTool[rt][2] = Tool[rt][2]
最后,我想做的是根據第二列([1])訂購我的rTool。 例如,我打印了5個rTool條目。 通過根據第二列對它們進行排序,最后一行應該是第一行。 我確實很難做到這一點,我懷疑這是因為我有元組而不是真正的3列數學矩陣。
[[ -584.89837646 -3648.6472168 402.177948 ]
[ -542.8659668 -3663.34545898 405.76959229]
[ -500.831604 -3678.04785156 409.32122803]
[ -458.79336548 -3692.75854492 412.7930603 ]
[ -416.74984741 -3637.48022461 416.15090942]]
不要猶豫,要求澄清,希望您能為我提供幫助! 謝謝。
首先,學習numpy。 在普通的python中做這種事情與所有pythonic背道而馳。
完成此操作后:
sorted_rtool = rTool[np.argsort(rTool[:,1])]
推動numpy home的重要性:
rTool = np.dot(Tool, R)
它不僅干凈很多,而且速度也快了幾個數量級。
您可以使用'sort'或'sorted'的'key'參數,請參見https://wiki.python.org/moin/HowTo/Sorting#Key_Functions
在您的情況下:
rTool.sort(key=lambda x: x[1])
要么
rToolSorted = sorted(rTool, key=lambda x: x[1])
您正在尋找list.sort()
的key
關鍵字(或內置的sorted()
)。在此處查看Key Functions
部分。
簡而言之,人們通常只是將lambda函數用作排序鍵,而您通常不會多次使用sort函數。 它是一個返回對象key
的函數,在該key
上對列表的每個元素進行排序。
因此,您可以執行以下操作:
def keyFunc(element):
return element[1]
rTool.sort(key=keyFunc)
要么:
rTool.sort(key=lambda x: x[1])
在這兩種情況下,都可以改用rTool = sorted(rTool, key=...)
,區別在於list.sort()
進行就地排序,如果不需要原始數組,效率更高。
key
函數實際上可以是您想要的任何東西,只要它返回可以排序的其他內容,那么如果您的點是具有x, y, z
屬性的對象,則可以執行rTool.sort(key x: xy)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.