【问题标题】:How to sort an array only by using argmin()如何仅使用 argmin() 对数组进行排序
【发布时间】:2017-12-11 12:08:10
【问题描述】:

如何仅使用argmin() 对数组进行升序排序?

例如,如果我定义sort_function(x),它只使用argmin()返回x的升序并执行以下操作:

print(sort_function(np.array([1,6,3,7]))

结果应该是[1 3 6 7]

【问题讨论】:

  • 你的问题是“我如何定义这个sort_function?”
  • 您确定要使用argmin 而不是argsort 执行此操作吗?
  • 只使用是什么意思?您可以或多或少地采用任何算法并将x > y 替换为np.argmin((x, y))。我认为这不算数?
  • 如果回答对您有帮助,请vote on, and accept it。谢谢。

标签: python arrays sorting numpy


【解决方案1】:

在这里,以极快的速度O(N ** 2) -

  1. 名单上拨打np.argmin
  2. 弹出该索引处的元素
  3. 重复直到列表为空
def sort_function(x):
    y = list(x)
    while y:
        yield y.pop(np.argmin(y))

list(sort_function(np.array([1, 6, 3, 7])))
[1, 3, 6, 7]

【讨论】:

  • 啊!那很快
  • 或只是return [y.pop(np.argmin(y)) for _ in x]
  • @Dark 请注意,当 cᴏʟᴅsᴘᴇᴇᴅ 说“快如闪电”时,他是在讽刺。这是一种非常愚蠢的排序方式。
  • 哈哈@PM2Ring 我的意思是发布解决方案; )。
  • 这个解决方案使用poplistyieldwhile,甚至def,但OP只要求argmin:(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-12
相关资源
最近更新 更多