Es gibt bereits eine umfassende Liste von Tipps für Python hier , so , was ich frage , Tipps sind, die mit den speziell gelten numpy
, scipy
oder pylab
Bibliotheken.
Dies können entweder Möglichkeiten sein, bereits verwendeten Code zu verkürzen numpy
, oder Möglichkeiten, allgemeine Python-Operationen mithilfe dieser Bibliotheken zu verkürzen.
Ein Tipp pro Antwort bitte.
pylab
nurmatplotlib.pyplot
+numpy
in einem veralteten allgemeinen Namespace ist. Dernumpy
Teil vonpylab
ist in dem Sinne trivial, dass ihre Importe die gleiche Anzahl von Bytes haben, so dass zusätzlich nur Plotmaterial stammen könntepylab
, aber ich vermute, dass Sie dies bei Ihrer Frage nicht im Sinn hatten.numpy
Pakete. Zum Beispielpylab.randint
ist gültig, wo numpy erfordern würdenumpy.random.randint
. Zum Golfenpylab
sollte also kürzerer Code angegeben werden.Antworten:
Nutzen Sie Numpys Rundfunk
Broadcasting bedeutet, ein mehrdimensionales Array entlang einiger seiner Singleton-Dimensionen zu replizieren, um es an die Größe eines anderen Arrays anzupassen. Dies geschieht automatisch für Numpy-Arrays, wenn arithmetische Operatoren auf sie angewendet werden.
Um beispielsweise eine 10 × 10-Multiplikationstabelle zu generieren, können Sie diese verwenden
Probieren Sie es online aus!
Hier
t
wird als Numpy-Array erstellt[1, 2, ..., 10]
. Dies hat die Form (10,), die (1,10) entspricht. Das andere Operandenarrayt[:,None]
hat die Größe (10,1). Durch Multiplizieren der beiden Arrays werden sie implizit repliziert, sodass sie sich so verhalten, als hätten beide eine Form (10, 10). Das Ergebnis, das ebenfalls die Form (10,10) hat, enthält die Produkte für alle Eintragspaare in den ursprünglichen Arrays.quelle
zip
Rundfunks. Wird das in seiner eigenen Antwort auftauchen?[*zip(t)]
es die gleiche Anzahl von Bytes hat wie die besser lesbaret[:,None]
. Aber Sie haben Recht, es kann erwähnenswert sein, also habe ich es hier wieder hinzugefügt[*zip(t)]
wäre zwei Bytes kürzer, wenn es mehr Dimensionen gäbe.[*zip(t)]
nur unter Python 3 funktioniert.my \t = 1..10; .fmt('%3d').put for t «*» t[*,Empty]
Sie es könntenzip(t)
Verwenden Sie r _ [...] anstelle von range (...)
Numpy bietet eine Matlab-ähnliche Syntax für die Array-Erstellung mit
r_[...]
. Jede Slice-Notation zwischen den Klammern wird als Array mit dem angegebenen Bereich interpretiert. So zum Beispielist äquivalent zu
und für die meisten Anwendungen kann ersetzen
Es kann auch komplexere Ausdrücke verarbeiten. Zum Beispiel, um Indizes von 0 bis 10 zu erhalten und wieder zurück zu gehen,
quelle