【发布时间】:2019-05-16 02:20:08
【问题描述】:
我有一个包含几亿个 np.uint8 元素的向量。它们的值范围仅从 0 到 255。
我需要对这个列表进行排序,我认为它应该比快速排序处理得更快。我想我可以找到所有值“0”的索引并将它们放在前面,然后对于所有值“1”并将它们放在最后一次插入之后,直到我完成为止。它将是唯一的突变后代,并带有一些索引并且应该很快工作。
是否有一个内置程序可以很好地、正确地执行此操作,并且可以在诸如“C”之类的快速的东西中完成,而无需我自己自制?你能指点我吗?
假设作为我实际问题的“玩具”,我想对 mandrill image 的 100 兆像素版本的每种颜色 (rgb) 的强度值进行排序,其中每种颜色都已转换为单一的、非常long,uint8 值的向量。如果我要在 python 中计算排序方法之间的差异,这将是合理的计算?
【问题讨论】:
-
您是对的,如果您只有少量值(例如 256),您可以使用您描述的“桶排序”(其中箱数是值的数量)。它将在
O(n)时间内工作(有额外的空间影响) -
不要重新发明轮子。大多数语言现在都实现了合并排序,这比你可以自制的任何东西都快。您在这里描述的是基数排序,它只是在达到特定数字时增加索引。然后你可以重新创建有序数组。
-
如果您搜索“Python 排序教程”这个短语,您会找到比我们在此处的答案中更好地解释它的资源。
-
这是一个数组还是列表?如果是数组,是一维的吗?
-
你打算对排序列表做什么?可能有比数据的排序副本更简单的东西,这取决于您要对结果做什么。例如。看看
numpy.bincount。