~~stoggle_buttons~~ ====== PDEs ====== para ecuaciones en derivadas parciales por elementos finitos, ''skfdiff'' (siempre que no sean deformaciones de sólidos, etc. que en teoría están mejor en ''sfepy'') * Interfaz muy sencilla * Barra de progreso (weeee) * Soporta como backend numpy o numba y paraleliza usando todos los cores ====== numpy ====== import numpy as np np.squeeze(array) # Elmina arrays tontos que suceden cuando np.array(algo) y algo ya es un array de numpy, o cuando un array # tiene elementos que son arrays unidimensionales en vez de números directamente. # Para detectarlo, la forma de resolverlo sin usar esto es algo de la forma: array = array[0] array = np.array([x[0] for x in array]) np.einsum('ij,jk->ik', A, B, C) # Permite indicar la estructura de índices con convenio de Einstein para no tenerla que adivinar con np.dot() # La descripción de indices es un str como primer parámetro y el resto son arrays de numpy # Varias condiciones lógicas sobre un array de numpy # Las condiciones no funcionan si se hacen sobre una lista ind = np.where((condicion1) & (condicion2) & . . . (condicionN)) np.memmap permite guardar arrays en disco sin que ocupen toda la memoria ===== Optimización ===== [[https://medium.com/free-code-camp/if-you-have-slow-loops-in-python-you-can-fix-it-until-you-cant-3a39e03b6f35|If you have slow loops in Python, you can fix it... until you can't]] ''np.einsum'' es un poco más rápido que ''np.sum'' porque especificas los índices Para aplicar funciones elemento a elemento en vez de con un ''for'', usar ''np.fromiter'', aunque si hay una versión "vectorizada por defecto" con ''lambda'' o similar, es lo más rápido. ''np.frompyfunc'' parece que vectoriza y además convierte en ''ufunc'', muy útil cuando una librería tiene una función que no soporta broadcasting (todavía no lo he probado) [[https://stackoverflow.com/questions/35215161/most-efficient-way-to-map-function-over-numpy-array]] ''np.memmap'' para cargar arrays en disco sin que ocupen espacio en memoria. Para tampoco cargarlos en memoria, hay que iterar sí o sí con ''for''.