python优先级排序_Python Numpy重新排列双向排序

我有一个结构化的numpy数组,我按顺序对它进行排序.

它工作得很好,但只是一个方向!

降:

sort(myStructuredArray,order=my_order)[::-1]

上升:

sort(myStructuredArray,order=my_order)

my_order的顺序类似于[col1,col2,-col3,col4,-col5,…,colN],对于某些列,我想将它命名为col1,col2和colN,以及其他降序col3和col5(减去信号).

在这个例子中,我想首先通过col1升序,然后通过col2升序,然后通过col3降序,然后通过col4升序,然后通过col5降序等等来排序我的数组……我怎么能这样做?

谢谢

解决方法:

你可以用numpy.lexsort做到这一点

In [1]: import numpy as np

In [2]: a = np.array([(4,0), (1,9), (1,0), (4,9)],

dtype=[('x',int),('y',float)])

In [3]: a

Out[3]:

array([(4, 0.0), (1, 9.0), (1, 0.0), (4, 9.0)],

dtype=[('x', '

In [4]: a['x']

Out[4]: array([4, 1, 1, 4])

In [5]: a['y']

Out[5]: array([ 0., 9., 0., 9.])

lexsort参数的顺序优先级与np.sort(…,order = …)相反.因此,首先按降序’x’然后按升序’y’进行排序:

In [6]: a[np.lexsort((a['y'], -a['x']))]

Out[6]:

array([(4, 0.0), (4, 9.0), (1, 0.0), (1, 9.0)],

dtype=[('x', '

笔记:

>这可以假设您的所有值都是数字(因为否定不会反转字符串排序).

>我在某个地方看到使用[‘x’] [:: – 1]作为键而不是-a [‘x’],但这对我现在不起作用.

标签:python,sorting,numpy,recarray

来源: https://codeday.me/bug/20190629/1327847.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值