Ya hay una lista completa de consejos para pitón aquí , así que lo que estoy pidiendo son consejos que se aplican específicamente a la utilización de los numpy
, scipy
o pylab
bibliotecas.
Estas pueden ser formas de acortar el código que ya está usando numpy
, o formas de acortar las operaciones comunes de Python usando estas bibliotecas.
Un consejo por respuesta, por favor.
pylab
es solomatplotlib.pyplot
+numpy
en un espacio de nombres común en desuso. Lanumpy
parte depylab
es trivial en el sentido de que sus importaciones tienen el mismo número de bytes, por lo que solo podría trazar cosas adicionalespylab
, pero sospecho que eso no es lo que tenía en mente con su pregunta.numpy
paquetes. Por ejemplo,pylab.randint
es válido donde lo requiera numpynumpy.random.randint
. Entonces, para el golfpylab
debe proporcionar un código más corto.Respuestas:
Haz uso de la transmisión de Numpy
Transmitir significa replicar una matriz multidimensional a lo largo de algunas de sus dimensiones singleton para que coincida con el tamaño de otra matriz. Esto sucede automáticamente para las matrices Numpy cuando se les aplican operadores aritméticos.
Por ejemplo, para generar una tabla de multiplicación de 10 × 10 puede usar
Pruébalo en línea!
Aquí
t
se crea como la matriz de Numpy[1, 2, ..., 10]
. Esto tiene forma (10,), que es equivalente a (1,10). La otra matriz de operandost[:,None]
, tiene tamaño (10,1). Multiplicar las dos matrices las replica implícitamente, por lo que se comportan como si ambas tuvieran forma (10,10). El resultado, que también tiene forma (10,10), contiene los productos para todos los pares de entradas en las matrices originales.fuente
zip
la transmisión, ¿va a surgir en su propia respuesta?[*zip(t)]
tiene el mismo número de bytes que el más legiblet[:,None]
. Pero tienes razón, vale la pena señalar, así que lo agregué aquí[*zip(t)]
sería dos bytes más corto si hubiera más dimensiones.[*zip(t)]
solo funcionará en Python 3.my \t = 1..10; .fmt('%3d').put for t «*» t[*,Empty]
o podría usarzip(t)
Utilice r _ [...] en lugar de rango (...)
Numpy proporciona una sintaxis similar a matlab para la creación de matrices usando
r_[...]
. Cualquier notación de corte entre paréntesis se interpreta como una matriz con el rango indicado. Entonces, por ejemploes equivalente a
y para la mayoría de los usos puede reemplazar
También puede manejar expresiones más complejas. Por ejemplo, para obtener índices de 0 a 10 y volver a bajar,
fuente