2013-06-29 140 views
1

我有一個包含10列不同類型的矩陣。我整理他們基於與字母數字列:在numpy矩陣中對字母數字字符串進行排序

data = np.sort(data, axis=0,order='AlphaNumColumn') 

它沒有做的工作權,即代替

BFT_job10_q0 
BFT_job13_q0 
BFT_job13_q1 
BFT_job1_q0 

BFT_job1_q0 
BFT_job10_q0 
BFT_job13_q0 
BFT_job13_q1 

任何numpy的能做些什麼??謝謝!

+0

相關:http://stackoverflow.com/questions/7638738/sort-numpy-string-array-with-negative-numbers –

回答

3

排序順序似乎是正確的。我會建議您檢查編號:

1 becomes 01 

如果你必須保持你的編號,你也可以這樣做:

key = lambda x: '.'.join(x.split('_')[1:3]).replace('job','').replace('q','') 

a[np.argsort([float(key(i)) for i in a[:,0]])] 

key()將執行以下操作:

key('BFT_job10_q0') --> 10. 
key('BFT_job1_q0') --> 1. 
key('BFT_job13_q1') --> 13.1 
key('BFT_job13_q0') --> 13. 
+0

謝謝,很好地認爲通過!問題是,我必須保留它們的名稱,因爲它對於下游工作非常重要...所以我可以在排序後使用key()將已刪除的名稱部分放回原位 - 我會這樣做,所以再次感謝 - 但是有什麼方法可以輕鬆獲得字母數字排序嗎? – Sara

+0

別擔心。名字保持原樣。我只是向你展示了key()是如何工作的。但是這個功能只用於排序,而不改變原始值... –

+0

嗨,再次。我感到無助。我試圖讓你的代碼適應一組新的名字,但我似乎無法找到辦法。數據通常與以前一樣,但是這一次,還有一點:BFT_job10_q0_type0等。您的代碼不起作用,因爲具有2位小數的數字不再是浮點數了...... – Sara

相關問題