vacia utilizar una tuplas tamaño sacar por listas lista elementos diccionario crear convertir comprensión como cargar python list set cython

python - utilizar - ¿Por qué convertir una lista en un conjunto en Cython lleva tanto tiempo?



sacar elementos de una lista python (2)

huge_list parámetro huge_list es algo así como [[12,12,14],[43,356,23]] . Y mi código para convertir la lista para establecer es:

cpdef list_to_set(list huge_list): cdef list ids cdef list final_ids=[] for ids in huge_list: final_ids.append(set(ids)) return final_ids

Tengo 2800 elementos de lista, cada uno tiene 30,000 id. Tarda alrededor de 19 segundos. ¿Cómo mejorar el rendimiento?

EDIT 1:
En lugar de set usé unique en numpy como debajo y numpy acelera en ~ 7 segundos:

df[''ids''] = df[''ids''].apply(lambda x: numpy.unique(x))

Ahora lleva 14 segundos (Anteriormente era ~ 20 segundos). No creo que esta vez sea aceptable todavía. : |


Cython no puede acelerar nada. La mayor parte del tiempo se dedica a la construcción de conjuntos, por ejemplo, el cálculo de los valores hash de sus elementos y su almacenamiento en los mapas. Esto ya está hecho en C, por lo que no es posible acelerarlo. La versión pura de Python:

final_ids = [set(ids) for ids in huge_list]

conduciría al mismo resultado.


Si solo desea convertir las listas anidadas para establecer, simplemente puede usar la función de map :

final_ids=map(set,huge_list)