移植到Python的mpy代码。在
在MATLAB(实际上是倍频程)中,我有类似于:
>> someArr = [9, 8, 7, 7]
>> [~, ans] = sort(someArr, 'descend')
ans =
1 2 3 4
所以在纽比我要做的是:
^{pr2}$我在MATLAB中得到了1, 2, 3, 4
,而0, 1, 3, 2
在Numpy上,我需要{
我相信这是由于每个函数中使用的排序算法,但是我检查了一下,看起来两者都在使用“快速排序”(请参见here和here)。在
我怎样才能把纽比的解和MATLAB的解相匹配呢?在
你可以选择不同的排序算法。把它改成
heapsort
对我很有用:编辑:这只适用于我看过的几个测试用例。对于
[9, 8, 7, 7, 4, 1, 1]
,它停止工作。我的答案可能不是一个好的解决办法。在为了使这项工作成功,我们需要聪明一点。}模拟。你是在模仿它,通过反转排序的结果(这最终是你要撤销的)。在
numpy
没有{我不确定
matlab
是如何实现的,但他们声称使用stable variant of quicksort。具体来说,对于降序排序:似乎
octave
在这里也是如此。在因为它们的排序是稳定的,所以可以保证输入中的等值顺序在输出中保持不变。
numpy
另一方面,它对快速排序没有这样的保证。如果我们想要一个稳定的numpy排序,我们需要使用mergesort
:好的,这个输出是有意义的。
^{pr2}$someArr[2] == someArr[3]
并且第三个元素在第四个元素之前,所以在输出中2
应该在3
之前(如果没有一个保证稳定的排序算法,我们就不能做这个声明)。现在是聪明的一步。。。您想要“降序”值,但是与其反转argsort
的输出,不如我们对输入进行否定呢?这将产生一种效果,即在排序之前,较大的数字会比较低的数字排序,就像降序排序一样。。。在现在我们谈了!由于mergesort被保证是稳定的,在较低索引处出现的元素(值相等)将首先出现在输出中,就像matlab/octave一样。不错。在
相关问题 更多 >
编程相关推荐