定义:如果数组A(a1,a2,...,an)大小相等且>=对于每个从到B(b1,b2,...bn)a_i>=b_ii1n. 
例如:
[1,2,3] >= [1,2,0]
[1,2,0] not comparable with [1,0,2]
[1,0,2] >= [1,0,0]
我有一个列表,其中包含大量此类数组(大约 10000,但可以更大)。数组的元素是正整数。我需要从这个列表中删除所有比至少一个其他数组大的数组。换句话说:如果存在这样B的,A >= B则删除A。
这是我目前的O(n^2)方法,非常慢。我只是将每个数组与所有其他数组进行比较,如果它更大,则将其删除。有什么方法可以加快速度。
import numpy as np
import time
import random
def filter_minimal(lst):
    n = len(lst)
    to_delete = set()
    for i in xrange(n-1):
        if i in to_delete:
            continue
        for j in xrange(i+1,n):
            if j in to_delete: continue
            if all(lst[i]>=lst[j]):
                to_delete.add(i)
                break
            elif all(lst[i]<=lst[j]):
                to_delete.add(j)
    return [lst[i] for i in xrange(len(lst)) if i not in to_delete]
def test(number_of_arrays,size):
    x = map(np.array,[[random.randrange(0,10) for _ in xrange(size)] for i in xrange(number_of_arrays)])
    return filter_minimal(x)
a = time.time()
result = test(400,10)
print time.time()-a
print len(result)
PS 我注意到使用numpy.all而不是内置 pythonall会大大减慢程序的速度。可能是什么原因?