当前位置: 首页 > 知识库问答 >
问题:

按降序高效地排序numpy数组?

储国发
2023-03-14

我很惊讶以前没有人问过这个特定的问题,但我真的没有在SO上或np的文档中找到它。排序

假设我有一个包含整数的随机numpy数组,例如:

> temp = np.random.randint(1,10, 10)    
> temp
array([2, 4, 7, 4, 2, 2, 7, 6, 4, 4])
> np.sort(temp)
array([2, 2, 2, 4, 4, 4, 4, 6, 7, 7])

但我希望解决方案按降序排序。

现在,我知道我总能做到:

reverse_order = np.sort(temp)[::-1]

但这最后一句话是否高效?它不创建一个按升序排列的副本,然后反转这个副本以得到按反转顺序排列的结果吗?如果情况确实如此,是否有一个有效的替代方案?看起来不像np.sort接受参数来更改排序操作中比较的符号,以获得相反的顺序。

共有3个答案

袁雅逸
2023-03-14

对于短数组,我建议使用np。argsort()通过查找已排序的否定数组的索引,这比反转已排序数组稍微快一些:

In [37]: temp = np.random.randint(1,10, 10)

In [38]: %timeit np.sort(temp)[::-1]
100000 loops, best of 3: 4.65 µs per loop

In [39]: %timeit temp[np.argsort(-temp)]
100000 loops, best of 3: 3.91 µs per loop
葛哲彦
2023-03-14
>>> a=np.array([5, 2, 7, 4, 4, 2, 8, 6, 4, 4])

>>> np.sort(a)
array([2, 2, 4, 4, 4, 4, 5, 6, 7, 8])

>>> -np.sort(-a)
array([8, 7, 6, 5, 4, 4, 4, 4, 2, 2])
邵阳辉
2023-03-14

temp[:-1]。sort()对数组进行适当排序,而np。排序(temp)[::-1]创建一个新数组。

In [25]: temp = np.random.randint(1,10, 10)

In [26]: temp
Out[26]: array([5, 2, 7, 4, 4, 2, 8, 6, 4, 4])

In [27]: id(temp)
Out[27]: 139962713524944

In [28]: temp[::-1].sort()

In [29]: temp
Out[29]: array([8, 7, 6, 5, 4, 4, 4, 4, 2, 2])

In [30]: id(temp)
Out[30]: 139962713524944
 类似资料:
  • 问题内容: 令我惊讶的是,以前没有提出过这个具体问题,但我的确没有在SO或文档中找到它。 假设我有一个包含整数的随机numpy数组,例如: 如果对它进行排序,则默认情况下我将获得升序: 但我希望解决方案按 降序 排序。 现在,我知道我可以永远做: 但这最后的陈述 有效 吗?它不是按升序创建副本,然后反转此副本以反转顺序获得结果吗?如果确实如此,是否有有效的选择?看起来好像不接受参数来更改排序操作中

  • 问题内容: 以下代码将按 升序 对数组进行排序: 我需要 按降序 排序。如何使用比较器执行此操作? 请帮忙。 问题答案: 对于原始数组类型,您必须编写一个反向排序算法: 或者,您可以将转换为并编写比较器: 或使用,因为它仅适用于非原始数组类型。 最后,

  • 问题内容: 我正在使用map接口从文件中读取,然后将其中的值存储为键值对。文件格式如下 我将从该文件中读取数据并将其存储为键值对,然后将其显示给用户。我的要求是以这种格式显示结果 因此,我需要按值的降序对地图进行排序。这样我就可以将它们显示为我的结果..我已经阅读了有关此内容并找到了以下代码 我希望这将按升序对值进行排序,我只想知道此方法是否正确,或者其他有效方法对我有帮助? 问题答案: 由于您可

  • 我有一个HashMap与作为关键和一个值作为价值。 我的目标是通过降序值对Hashmap进行排序。应在

  • 我们必须按降序对数组进行部分排序。 我知道d::partial_sort但它是按升序排列的。 http://en.cppreference.com/w/cpp/algorithm/partial_sort. 是他们的任何其他这样的功能,可以这样做,或任何快速算法这样做。

  • 问题内容: 如何在如下所示的SQLAlchemy查询中使用ORDER BY ? 此查询有效,但以升序返回: 如果我尝试: 然后我得到:。 问题答案: 来自@ jpmc26的用法