NumPy-任何dtype数组的降序稳定arg-sort

附庸风雅

NumPy的np.argsort可以通过传递参数来进行稳定的排序kind = 'stable'

同时np.argsort不支持反向递减顺序。

如果需要非稳定行为,则可以通过轻松建模降序desc_ix = np.argsort(a)[::-1]

我正在寻找对a所有可比较的降序稳定NumPy数组有效/简便的解决方案dtype在上一段中,请参阅我对“稳定性”的含义。

对于dtype任何数值的情况,可以通过对数组求反的形式轻松地进行稳定的降序arg排序:

print(np.argsort(-np.array([1, 2, 2, 3, 3, 3]), kind = 'stable'))
# prints: array([3, 4, 5, 1, 2, 0], dtype=int64)

但是我需要支持任何可比的dtypeincludenp.str_np.object_

只是为了澄清-可能是降序,经典含义是stable指从右到左枚举相等的元素。如果是这样,那么在我的问题中,含义stable + descending是不同的-应该从左到右列举元素的相等范围,而彼此之间的相等范围按降序排列。即,应该像上面的最后一个代码一样实现相同的行为。即我希望在某种意义上像Python在下一个代码中实现的稳定性一样:

print([e[0] for e in sorted(enumerate([1,2,2,3,3,3]), key = lambda e: e[1], reverse = True)])
# prints: [3, 4, 5, 1, 2, 0]
Jdehesa

我认为这个公式应该有效:

import numpy as np
a = np.array([1, 2, 2, 3, 3, 3])
s = len(a) - 1 - np.argsort(a[::-1], kind='stable')[::-1]
print(s)
# [3 4 5 1 2 0]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章