Il existe déjà une liste complète d'astuces pour python ici , donc ce que je demande, ce sont des astuces qui s'appliquent spécifiquement à l'utilisation de numpy
, scipy
ou des pylab
bibliothèques.
Il peut s'agir soit de raccourcir le code déjà utilisé numpy
, soit de raccourcir les opérations python courantes en utilisant ces bibliothèques.
Un conseil par réponse, s'il vous plaît.
pylab
est justematplotlib.pyplot
+numpy
dans un espace de noms commun dépréciée. Lanumpy
partie depylab
est triviale dans le sens où leurs importations ont le même nombre d'octets, donc seuls les tracés pourraient en plus provenirpylab
, mais je suppose que ce n'est pas ce que vous aviez en tête avec votre question.numpy
packages. Par exemple,pylab.randint
est valide là où numpy aurait besoinnumpy.random.randint
. Donc, pour le golfpylab
devrait fournir un code plus court.Réponses:
Profitez de la diffusion de Numpy
La diffusion signifie la réplication d'un tableau multidimensionnel le long de certaines de ses dimensions singleton pour correspondre à la taille d'un autre tableau. Cela se produit automatiquement pour les tableaux Numpy lorsque des opérateurs arithmétiques leur sont appliqués.
Par exemple, pour générer une table de multiplication 10 × 10, vous pouvez utiliser
Essayez-le en ligne!
Ici
t
est créé en tant que tableau Numpy[1, 2, ..., 10]
. Cela a la forme (10,), ce qui équivaut à (1,10). L'autre tableau d'opérandes,,t[:,None]
a une taille (10,1). La multiplication des deux tableaux les réplique implicitement, de sorte qu'ils se comportent comme s'ils avaient tous deux une forme (10,10). Le résultat, qui a également une forme (10,10), contient les produits pour toutes les paires d'entrées dans les tableaux d'origine.la source
zip
la radiodiffusion, cela va-t-il apparaître dans sa propre réponse?[*zip(t)]
a le même nombre d'octets que le plus lisiblet[:,None]
. Mais vous avez raison, cela vaut peut-être la peine d'être noté, alors je l'ai ajouté ici[*zip(t)]
serait de deux octets plus court s'il y avait plus de dimensions.[*zip(t)]
ne fonctionnera que sur python 3.my \t = 1..10; .fmt('%3d').put for t «*» t[*,Empty]
ou que vous pourriez utiliserzip(t)
Utilisez r _ [...] au lieu de range (...)
Numpy fournit une syntaxe de type matlab pour la création de tableaux à l'aide de
r_[...]
. Toute notation de tranche entre les crochets est interprétée comme un tableau avec la plage indiquée. Ainsi, par exempleest équivalent à
et pour la plupart des utilisations peut remplacer
Il peut également gérer des expressions plus complexes. Par exemple, pour obtenir des indices de 0 à 10 et redescendre,
la source