2013-06-29 103 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

相关问题