Python resuelve el problema de top-k

Para encontrar las cien filas de datos más grandes de mil millones de filas de datos, el uso más común es el montón raíz pequeño, y la implementación del montón raíz pequeño en python es muy simple.

class TopHeap(object):

    def __init__(self, k):
        self.k = k
        self.top_list = []

    def top(self, index):
        for i in index[:self.k]:
            heapq.heappush(self.top_list, i)
            heapq.heapify(self.top_list)

        for j in index[self.k:]:
            if j > self.top_list[0]:
                heapq.heapreplace(self.top_list, j)
                heapq.heapify(self.top_list)

        return self.top_list

Defina una clase TopHeap para encontrar los k datos superiores más grandes de la matriz de índice con muchos datos

index = np.random.randint(low=0, high=0x7FFFFFFF, size=1000000000)

Use la biblioteca numpy para crear matrices aleatorias, como crear una matriz aleatoria con mil millones de filas de datos

    th = TopHeap(100)
    top_list = th.top(index)

Luego use la clase TopHeap para encontrar las primeras cien filas de datos más grandes en esta matriz

Sin embargo, el tiempo de ejecución final es mucho peor que la velocidad de c++ o java que también usa el montón raíz pequeño, por lo que si desea mejorar aún más la velocidad, solo puede usar métodos como CPython para aumentar la velocidad al nivel de c++

おすすめ

転載: blog.csdn.net/weixin_55915644/article/details/125567542