2013/8/7 Chema Cortes <pych...@gmail.com>: > Pytable+hdf5 lo tenía más asociado con datos masivos "jerarquizados". > Igual estoy equivocado.
PyTables son, esencialmente, tablas de datos, con columnas homogéneas. Ofrece una interfaz tipo ndarray (incluyendo slices), pero que para muchas operaciones optimiza el acceso a disco. También tiene capacidades de búsqueda "in kernel" (las filas en las que la tercera columna sea menor que la raíz de dos), que se hacen a velocidad de C. Es práctico para manejar volúmenes de datos muy grandes que no quepan en memoria. > Numexpr (y/o numba) también los tengo pendientes. CArray no lo > conocía, aunque parece relacionado con los anteriores. ¿Podría numexpr > mejorar los resultados de numba que ha puesto Daπid? CArray significa "chunked array". Es un ndarray que no ocupa necesariamente un trozo de memoria contiguo. Cuando se hacen insertan o eliminan elementos en algún punto del medio de un ndarray, todo el resto de la memoria hasta el final ha de desplazarse; un carray, al estar divididido, sólo necesita mover un bloque pequeño. Creo que no es algo que te interese ahora. No estoy seguro de esto, pero por lo que he visto, carray es útil como estructura de bajo nivel sobre la que montar librerías avanzadas de manejo de datos, no sé si hay mucho uso en producción directamente. Por su lado, lo único que Numexpr hace es operaciones elemento a elemento (o la suma/producto total) sobre arrays optimizando el uso de la caché de la CPU y paralelizando de forma transparente. En el clásico ejemplo a + b * c, siendo a, b y c ndarrays, Python puro realiza primero b * c, lo guarda en una variable temporal que luego suma a a. Numexpr hace las operaciones elemento a elemento directamente (a[0] + b[0] * c[0]), saltándose la variable temporal y aplicando todas las optimizaciones mencionadas. En la documentación no mencionan nada de revertir un array, y, aunque existiera, dudo que fuera útil en este caso. Numba es un optimizador genérico* con mucha maquinaria pesada. La idea es que sea prácticamente automático, y pueda inferir tipos, compilar, paralelizar, procesar datos a través de la GPU... de forma transparente o casi transparente (siempre vienen bien ayudas). Su mayor inconveniente es que está todavía en desarrollo temprano (heisenbugs incluidos); y que requiere compilar LLVM. ____ * Aunque a día de hoy sólo es verdaderamente efectivo sobre ndarrays, y la mayor parte del desarrollo va en esa dirección. _______________________________________________ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/