在性能方面,n的阵型答案严重受挫

时间:2016-11-15 23:22:09

标签: python numpy

在下面的问题How do I sort a list with positives coming before negatives with values sorted respectively?中有一些解决方案,其中一个(我的建议)是使用numpy数组...我认为它会很快但它被证明是最慢的按数量级,这很好:),但为什么会这样呢?为方便起见,下面重复基准:

import numpy as np
from timeit import timeit
from bisect import bisect

def bisectme():
    lst.sort()
    i = bisect(lst, 0)
    return lst[i:] + lst[:i]

def lexicon():
    return sorted(lst, key=lambda x: (x < 0, x))

def comprehension():
    return sorted([i for i in lst if i > 0]) + sorted([i for i in lst if i < 0])

def arrayme():
    return np.concatenate([np.sort(ar[ar >= 0]), np.sort(ar[ar < 0])], axis=0)

lst = list(range(-10**1, 0, 1)) + list(range(10**1, -1, -1))
ar = np.array(lst)


print("bisectme:", timeit(bisectme))
print("lexicon:", timeit(lexicon))
print("comprehension:", timeit(comprehension))
print("arrayme:", timeit(arrayme))

# bisectme: 1.7116674770368263
# lexicon: 8.446330879000016
# comprehension: 5.8491336239967495
# arrayme: 10.91806474502664

0 个答案:

没有答案