为给定列排序numpy矩阵

时间:2013-06-30 04:39:19

标签: python numpy sorting matrix

我尝试使用Ned Batchelder代码按人类顺序排序NumPy矩阵,正如以下帖子中提出的那样:

Sort numpy string array with negative numbers?

代码在一维数组上运行,命令为:

print (sorted(a, key=natural_keys))

现在,我的问题是我的数据是一个10列矩阵,我想根据一列(我们说MyColumn)对它进行排序。我找不到修改代码的方法来打印根据这个列排序的整个矩阵。我能想到的就是:

print (sorted(a['MyColumn'], key=natural_keys))

但是,当然,只有MyColumn出现在输出中,尽管它已正确排序......

有没有办法打印整个Matrix?

这是我用来加载数组的命令(我将原始的imputfile简化为3列数组):

data = np.loadtxt(inputfile, dtype={'names': ('ID', 'MyColumn', 'length'),
'formats': ('int32', 'S40', 'int32')},skiprows=1, delimiter='\t')

ID  MyColumn    length
164967  BFT_job13_q1_type2  426
197388  BFT_job8_q0_type2   244
164967  BFT_job13_q0_type1  944
72406   BFT_job1_q0_type3   696

以下是输出理想情况:

ID  MyColumn    length
72406   BFT_job1_q0_type3   696
197388  BFT_job8_q0_type2   244
164967  BFT_job13_q0_type1  944
164967  BFT_job13_q1_type2  426

1 个答案:

答案 0 :(得分:5)

如果您有一个名为np.matrix的{​​{1}}:

m

如果您有一个名为col = 1 m[np.array(m[:,col].argsort(axis=0).tolist()).ravel()] 的{​​{1}}:

np.ndarray

如果您有一个带有命名列的结构化数组:

a

根据您的具体情况,您需要the following key function

col = 1
a[a[:,col].argsort(axis=0)]