superficies punto matrices graficos graficas graficar dibujar crear coordenadas python performance numpy set

python - punto - ¿Hay una biblioteca como NumPy para los cálculos establecidos?



pandas python (0)

Para cálculos numéricos rápidos, a menudo uso NumPy. A pesar de que NumPy es una gran herramienta, (obviamente) no es una buena opción para las operaciones de conjunto, ya que NumPy funciona con matrices. Incluso los objetos de conjunto integrados de Python funcionan mucho más rápido que usar NumPy para operaciones de conjunto:

Preparación:

# NumPy arrays a = np.unique(np.random.randint(0, high=1000, size=1000)) b = np.unique(np.random.randint(0, high=1000, size=1000)) # Python''s built-in set objects sa = set(a) sb = set(b)

Establecer intersección :

# NumPy timeit.timeit("np.intersect1d(a, b)", setup="from __main__ import a, b, np", number=10000) > 1.3161415259819478 # Python timeit.timeit("sa.intersection(sb)", setup="from __main__ import sa, sb", number=10000) > 0.2791759959945921

Establecer la diferencia :

# NumPy timeit.timeit("np.setdiff1d(a, b)", setup="from __main__ import a, b, np", number=10000) > 0.6135410660062917 # Python timeit.timeit("sa - sb", setup="from __main__ import sa, sb", number=10000) > 0.21169587498297915

Establecer unión :

# NumPy timeit.timeit("np.union1d(a, b)", setup="from __main__ import a, b, np", number=10000) > 0.4114252869854681 # Python timeit.timeit("sa.union(sb)", setup="from __main__ import sa, sb", number=10000) > 0.2402713909978047

Por supuesto, esto es bastante poco representativo, porque a y b contienen enteros aleatorios ... pero he probado esto varias veces, también con rangos. NumPy siempre era algo así como 1,5 a 6 veces más lento que los objetos del conjunto integrados de Python.

Además, supongo que las matrices de NumPy no son geniales cuando los elementos tienen que agregarse o eliminarse a menudo.

Problema : actualmente estoy trabajando con conjuntos que generalmente contienen más de 10.000 elementos, a veces incluso millones de elementos. Además, agrego o elimino elementos con bastante frecuencia.

Pregunta: ¿Existe algún tipo de biblioteca disponible para operaciones rápidas en Python? ¿Alguna biblioteca que ofrece una API para elementos precompilados para operaciones de conjunto, como NumPy para arreglos / operaciones numéricas?