gpt4 book ai didi

python - 以与 sorted(, key=) 相同的方式对 numpy 数组进行排序

转载 作者:太空狗 更新时间:2023-10-30 03:04:48 24 4
gpt4 key购买 nike

例如,要先按实部排序复数数组,然后按虚部的大小排序,最后按负虚部排序:

def order(a):
return a.real, abs(a.imag), sign(a.imag)

z = array(sorted(z, key=order))

所以

array([ 1.+2.j, 5.+0.j, 1.+0.j, 1.+1.j, 1.+1.j, 1.-1.j , 6.+0.j, 1.-1.j, 1.-2.j])

成为

array([ 1.+0.j, 1.-1.j, 1.-1.j, 1.+1.j, 1.+1.j, 1.-2.j , 1.+2.j, 5.+0.j, 6.+0.j])

我认为有一种方法可以使用 numpy 的 argsort 来做同样的事情,这可能更快,但我无法弄清楚:

In [2]: argsort((a.real, abs(a.imag), sign(a.imag)))
Out[2]:
array([[0, 2, 3, 4, 5, 7, 8, 1, 6],
[1, 2, 6, 3, 4, 5, 7, 0, 8],
[5, 7, 8, 1, 2, 6, 0, 3, 4]])

最佳答案

您可以使用 np.lexsort :

import numpy as np
a = np.array([ 1.+2.j, 5.+0.j, 1.+0.j, 1.+1.j, 1.+1.j, 1.-1.j, 6.+0.j,
1.-1.j, 1.-2.j])
sorted_idx = np.lexsort((np.sign(a.imag), np.abs(a.imag), a.real))
>>> a[sorted_idx]
array([ 1.+0.j, 1.-1.j, 1.-1.j, 1.+1.j, 1.+1.j, 1.-2.j, 1.+2.j,
5.+0.j, 6.+0.j])

请注意排序键是倒序的,即最后一个是主要的。

关于python - 以与 sorted(, key=) 相同的方式对 numpy 数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14392803/

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