use*_*128 5 python sorting numpy recarray
我有一个结构化的numpy数组,并且按顺序对其进行排序。它工作正常,但仅在一个方向上!
降序:
sort(myStructuredArray,order=my_order)[::-1]
Run Code Online (Sandbox Code Playgroud)
和
上升:
sort(myStructuredArray,order=my_order)
Run Code Online (Sandbox Code Playgroud)
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.])
Run Code Online (Sandbox Code Playgroud)
参数的顺序优先级与 的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')])
Run Code Online (Sandbox Code Playgroud)
笔记:
a['x'][::-1]用作密钥而不是,-a['x']但现在这对我不起作用。| 归档时间: |
|
| 查看次数: |
1526 次 |
| 最近记录: |