Python ist eine Programmiersprache, die häufig in der Forschung zum maschinellen Lernen verwendet wird. Insbesondere wenn Sie es im Bereich der Grundlagenforschung einsetzen möchten, wird dies häufig schwierig. Dies liegt daran, dass das Schreiben vieler for-Anweisungen langsamer wird. Wenn Sie also versuchen, Ihr Bestes zu geben, ohne eine for-Anweisung zu schreiben, werden Sie auf verschiedene Probleme stoßen, aber ich möchte Ihnen die Verwendung von np.newaxis
vorstellen, mit der ich Probleme hatte. Sie werden häufig darauf stoßen, wenn Sie mit verschiedenen Parametern experimentieren möchten.
[Python] Numpy Reference, Extraction, Join Indexing - docs.scipy.org
Zunächst ist es eine gute Idee, herauszufinden, welche Art von Daten Sie haben und welche Ziele Sie erreichen möchten. Denken Sie daran, welche Art von Daten, welche Form das Array hat und welche Dimension es hat.
Betrachten Sie der Einfachheit halber die folgende Situation.
init.py
import numpy as np
assert a.shape == (N,) # ndarray
assert b.shape == (N, K) # ndarray
a
und b
sind beide Vektoren, und ich möchte a + b
machenWenn Sie dies mit einer for-Anweisung schreiben,
naive.py
c = np.zeros(N, K)
for k in range(K):
c[:, k] = a + b[:, k]
Ich möchte jedoch nicht so viel wie möglich eine for-Anweisung schreiben. Sie können auch einfach "a + b" ausführen, dies wird jedoch überhaupt nicht in der Lage sein, komplizierte Probleme zu lösen.
Das Ziel dieses Mal ist es, "a + b" für jede der "K" b "Proben zu machen und die Ergebnisse für jede Probe zu erhalten. Definieren wir die Form des Endergebnisses = (Anordnung der Ziele).
goal.py
c = np.zeros(N, K)
hogehoge()
assert c.shape == (N, K)
Es wird so sein.
Dies ist, was passiert, wenn Sie normalerweise "a + b" in Ihren Kopf setzen,
Ich weiß nicht, wie ich berechnen soll, weil "b" ein zweidimensionales Array mit mehreren Abtastwerten ist.
Lassen Sie mich Ihnen Anweisungen zur Berechnung geben. Das ist np.newaxis
.
Eigentlich ist die Substanz von "np.newaxis" "None", aber verwenden wir "np.newaxis", ohne sich zu viele Sorgen zu machen.
Wenn eine Operation (hier +
) ausgeführt wird, bei der das Array dieselbe Form haben muss, werden wir von hier aus anweisen, "Bitte machen Sie dieselbe Form". Erstens ist die Dimension des Arrays "a.shape == (N,)", also setzen wir es zumindest auf "a.shape == (N, 1)". Verwenden Sie dazu a [:, np.newaxis]
. Diese Operation ermöglicht es Numpy, automatisch aus dem anderen Argument des Operators zu bestimmen, das sich von "(N, 1)" bis "(N, K)" erstreckt und die Berechnung durchführt.
add_samples.py
import numpy as np
assert a.shape == (N,) # ndarray
assert b.shape == (N, K) # ndarray
# a[:, (Nicht genug hier)]
c = a[:, np.newaxis] + b[:, :]
assert c.shape == (N, K) #Lassen Sie uns gleichzeitig die Rolle der Fehlerprüfung und des Memos übernehmen
Auf diese Weise erleichtert ein ruhiges Verständnis dessen, was Numpy automatisch tut, die Bewältigung komplexer Probleme.
Ich werde es später hinzufügen, auch wenn es ein schwierigeres Problem ist.
Wenn Sie die Erklärung schwer verstehen, teilen Sie uns dies bitte mit. Fragen etc. werden auch in den Kommentaren akzeptiert.
Recommended Posts