看板 Python 關於我們 聯絡資訊
各位大大好 小魯現在有個多維排序的問題 假設有2個list或array 每一個裡面又有3*3的元素 e.g. a=[ [9,8,7], [6,5,4], [3,2,1]] b=[ [11,12,13], [14,15,16], [17,18,19]] 我要如何讓b照著a來排序 結果希望像是 [[13,12,11], [7,8,9]] 或是 [[13,7],[12,8],[11,9]]之類的 總之就是一個多維array或list照著另一個來排序 用了sort, sorted,等等在這種多維的情況下不知道是我哪裡寫錯還是怎樣 排不太出來 原本是用一個一個抓出來變一維的再排序的方法 不過在我的code裡面數據一大就會跑得很慢 希望能直接改了再取出來這樣 小魯先謝謝各位了 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 219.85.113.105 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1428422533.A.EE5.html
darkgerm: 照著另一個來排序?什麼意思? 04/08 00:17
例如A=0,1,3,5,8 B=5,6,4,2,3 A照B排完變成 a=5,8,3,0,1 b=2,3,4,5,6 類似這樣 一維的很簡單 不過多維的我用都怪怪的 ※ 編輯: JetaimeMia (219.85.113.105), 04/08/2015 00:35:27 ※ 編輯: JetaimeMia (219.85.113.105), 04/08/2015 00:36:45
ccwang002: 能用 numpy 嗎? 04/08 01:26
ccwang002: sorted_ix = np.argsort(a, axis=1) 04/08 01:38
ccwang002: _ix = np.arange(a.shape[0])[:, np.newaxis] 04/08 01:38
ccwang002: sorted_a = a[_ix, sorted_ix] 04/08 01:38
ccwang002: followed_b = b[_ix, sorted_ix] 04/08 01:38
ccwang002: Ref http://stackoverflow.com/a/10922358 04/08 01:39
ccwang002: 這樣能把 a 的順序同步到 b 上,剩下怎麼組合就看你了 04/08 01:42
喔喔 謝謝! 我剛也是用argsort解決了 不過比較爛 哈 這篇還有你的方法似乎更好 滿詳細的 謝謝囉! ※ 編輯: JetaimeMia (219.85.113.105), 04/08/2015 04:13:10