2016-12-24 44 views
3

这看起来像是重复的Check whether non-index column sorted in Pandas什么是确定数组是否被排序的最快方法?

我看过那篇文章和所有答案。没有人(保存一个答案)使用numpy地址。这一切都集中在python列表上。通过询问与numpy标签类似的问题,我相信我会得到不同的答案。这就是说,在这个问题上。


考虑两个数组abb排序,而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() 

我还能做些什么来改善这个想法?什么是最快的pandasnumpy算法来确定pd.Seriesnp.ndarray是否排序?


is_sorted(a) 

False 

is_sorted(b) 

True 

+3

一些熊猫算法这里提到:http://stackoverflow.com/questions/28419877/check-whether-non-index-column-sorted-in-pandas(我并不是说这是一个重复的,只是似乎有一些很好的建议) – JohnE

+0

这些都很方便!感谢那个链接。 – piRSquared

+1

'(np.diff(a)> 0).all()'和'(np.diff(b)> 0).all()'怎么样?唯一的问题是逆向排序。但我认为'np.abs(np.diff(a)> 0).all()'应该没问题? – Abdou

回答

2

是O(nlogn)到数组排序,而是说,如果数组已经排序,只需要为O(n)。

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

欣赏加大O信息! – piRSquared

+0

如果有NaN值,则失败。 –

+0

你只需将它分成两步:1)数组是否可排序? 2)如果是这样,是否排序? –

相关问题