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)