确定数组是否已排序的最快方法是什么?

piR*_*red 5 python numpy pandas

这可能看起来像是检查非索引列是否在 Pandas 中排序的重复项

我读了那个帖子和所有的答案。没有人(保存一个答案)使用 numpy 地址。这一切都集中在 python 列表上。通过用numpy标签提出类似的问题,我相信我会得到不同类别的答案。说到这个问题。


考虑两个数组a和b。 b已排序,a而未排序。

a = np.array([2, 1, 3, 0])

b = np.arange(4)
Run Code Online (Sandbox Code Playgroud)

我写了这个函数来确定排序

def is_sorted(x):
    return (np.arange(len(x)) == np.argsort(x)).all()
Run Code Online (Sandbox Code Playgroud)

我还能做些什么来改进这个想法?确定 a或是否已排序的最快pandas或numpy算法是什么?pd.Seriesnp.ndarray


is_sorted(a)

False  
Run Code Online (Sandbox Code Playgroud)
is_sorted(b)

True  
Run Code Online (Sandbox Code Playgroud)

Da *_* Qi 4

对数组进行排序的时间复杂度为 O(nlogn),但判断数组是否已排序只需要 O(n)。

is_sorted = lambda x: (np.diff(x)>=0).all()
Run Code Online (Sandbox Code Playgroud)