【问题标题】:Sort alphanumeric strings in numpy matrix在 numpy 矩阵中对字母数字字符串进行排序
【发布时间】:2013-06-26 22:26:18
【问题描述】:

我有一个包含 10 列不同类型的矩阵。我根据字母数字列对它们进行了排序:

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 能做些什么呢?谢谢!

【问题讨论】:

标签: python sorting matrix numpy alphanumeric


【解决方案1】:

排序顺序似乎是正确的。我建议您检查您的编号:

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.

【讨论】:

  • 谢谢,深思熟虑!问题是,我必须保持名称原样,因为这对下游工作很重要......所以我可以在排序后使用 key() 将删除的名称部分放回原处 - 我会这样做,所以再次感谢 - 但有什么方法可以轻松获得字母数字排序?
  • 别担心。名称保持原样。我刚刚向您展示了key() 的工作原理。但是这个函数只用于排序,不会改变原来的值...
  • 嗨,再次。我感到无助。我试图让您的代码适应一组新的名称,但我似乎找不到这样做的方法。数据通常与以前相同,但这次,还有更多:BFT_job10_q0_type0 等。您的代码不能作为具有 2 位小数的数字不再是浮点数......
猜你喜欢
  • 2020-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-05
  • 2021-09-19
  • 2021-09-17
  • 1970-01-01
相关资源
最近更新 更多