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

Python 确定数组是否已排序的最快方法是什么?,python,pandas,numpy,Python,Pandas,Numpy,这可能看起来像是一个复制品 我读了那篇文章和所有的答案。没有人(保存一个答案)使用numpy地址。所有这些都集中在python列表上。用numpy标签问一个类似的问题,我相信我会得到不同的答案。话虽如此,我还是要回答这个问题 考虑两个数组a和bb已排序,而a未排序 a = np.array([2, 1, 3, 0]) b = np.arange(4) 我编写这个函数是为了确定排序的正确性 def is_sorted(x): return (np.arange(len(x)) ==

这可能看起来像是一个复制品

我读了那篇文章和所有的答案。没有人(保存一个答案)使用numpy地址。所有这些都集中在python列表上。用
numpy
标签问一个类似的问题,我相信我会得到不同的答案。话虽如此,我还是要回答这个问题


考虑两个数组
a
b
<代码>b已排序,而
a
未排序

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

b = np.arange(4)
我编写这个函数是为了确定排序的正确性

def is_sorted(x):
    return (np.arange(len(x)) == np.argsort(x)).all()
我还能做些什么来改进这个想法?确定是否排序了
pd.Series
np.ndarray
的最快
pandas
numpy
算法是什么



对数组排序是O(nlogn),但要判断数组是否已排序,只需O(n)


这里提到的一些算法:(我不是说它是重复的,只是似乎有一些好的建议)这些都很方便!谢谢你的链接。
(np.diff(a)>0.all()
(np.diff(b)>0.all()
怎么样?唯一的问题是逆向排序。但是我认为
np.abs(np.diff(a)>0)。all()
应该没问题吧?如果数据中有NAN,大多数临时解决方案都会失败
pd.algos.is_lexsorted()
在这种情况下不会失败。
pandas.algos.is_lexsorted
实际上采用64位有符号整数输入。关于IEEE浮点运算的工作原理,这意味着它恰好对64位NAN“起作用”,但在负浮点输入时失败。这不是一个解决方案。感谢添加大O信息!如果存在NaN值,则此操作失败。您只需将其分为两个步骤:1)数组是否可排序?2) 如果是这样的话,它被排序了吗?在研究了pd.algos.is_lexsorted之后,我很高兴这是一个dup<代码>排序很快。
is_sorted(a)

False  
is_sorted(b)

True  
is_sorted = lambda x: (np.diff(x)>=0).all()