gpt4 book ai didi

Python Numpy recarray 排序双向

转载 作者:行者123 更新时间:2023-12-03 20:17:15 26 4
gpt4 key购买 nike

我有一个结构化的 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', '<i8'), ('y', '<f8')])

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', '<i8'), ('y', '<f8')])

笔记:
  • 假设您的所有值都是数字值,则此方法有效(因为负数不会反转字符串排序)。
  • 我曾在某处看到使用 a['x'][::-1]作为 key 而不是 -a['x']但这对我现在不起作用。
  • 关于Python Numpy recarray 排序双向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15972568/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com