[PYTHON] numpy Speicher wiederverwenden Spickzettel

Einführung

Für diejenigen, die mit großen Matrizen umgehen, ist das Malloc / Realloc von Matrizen ein wichtiges Thema. Böse Menschen, die Speicher recyceln möchten, sollten sich diesen kurzen Spickzettel ansehen.

Array-Initialisierung

Es kann vorkommen, dass Sie das Array mit 0 füllen möchten, z. B. am Anfang einer Schleife. Verwenden Sie "numpy.ndarray.fill", um ein bereits zugewiesenes Array mit einem bestimmten Wert zu füllen.

import numpy as np

a = np.ones(5)

for i in range(5):
    a.fill(0)
    a[i] = 1
    print(a)

Kopie des Arrays

Verwenden Sie "numpy.copyto", wenn Sie den Inhalt eines Arrays in ein anderes Array kopieren möchten. Beachten Sie, dass numpy.copy ein neues Array generiert.

import numpy as np

m, n = 2000, 1000
A = np.ones((m, n))
B = np.zeros(A.shape)

#Eine Kopie, die kein neues Array generiert
np.copyto(B, A)

Wenn Sie ein großes Array sichern und von Anfang an mit einem kleinen Array füllen möchten, können Sie Slices verwenden. Wenn Sie den verbleibenden Teil mit 0 füllen möchten, verwenden Sie die obige "Füllung", um ihn zu verarbeiten.

import numpy as np

a = np.array([0, 1, 2, 3, 4])
b = np.array([5, 5, 5])

np.copyto(a[0:3], b)  #Füllen Sie von Anfang an mit kleinen Array-Werten
a[3:5].fill(0)        #Füllen Sie den restlichen Teil mit 0

Mathematische Manipulation

Für mathematische Operationen können diejenigen, die "out" als Argument verwenden können, das Speicherziel angeben. Selbst wenn Sie es nicht bekommen können, gibt es Zeiten, in denen Sie nicht mit der Sequenz selbst herumspielen.

Vier Regeln / andere

Operationen, die den Parameter "out" in [Mathematische Funktionen] angeben können (https://numpy.org/doc/stable/reference/routines.math.html), verwenden Speicher. Die "Form" des Arrays kann unterschiedlich sein, solange sie innerhalb des Bereichs liegt, den der Rundfunk verarbeiten kann. Wenn das Zuweisungsziel mit der ursprünglichen Matrix übereinstimmt, können Sie einen Zuweisungsoperator wie "+ =" verwenden.

import numpy as np

A = np.array([[1, 2, 3],
              [4, 5, 6]])
B = np.array([[7, 8, 9],
              [8, 7, 6]])

C = np.zeros(A.shape)

#Vier Regeloperationen, die kein neues Array generieren
np.add(A, B, out=C)
np.multiply(A, B, out=C)
np.subtract(A, B, out=C)
np.divide(A, B, out=C)

#Muster, die Zuweisungsoperatoren verwenden
A += B
A -= B
A *= B
A /= B

Beachten Sie, dass "A = A + B" eine neue Matrix erzeugt und diese "A" zuweist.

Translokation

Die Übertragung spielt nur mit dem Parameter namens strides Es ist schnell, weil die Sequenz selbst nicht manipuliert wird.

import numpy as np

A = np.array([[1, 2, 3],
              [4, 5, 6]])

#Die Translokation generiert keine neue Sequenz
B = A.T

B[0,1] = 9

print(A)

output


array([[1, 2, 3],
       [9, 5, 6]])

Obwohl in diesem Artikel nicht vorgestellt, ist "Umformen" auch schnell, da sich die Reihenfolge der Anordnung selbst nicht geändert hat.

Skalare Zeiten

Sie können den Operator * = verwenden.

import numpy as np

A = np.array([[1, 2, 3],
              [4, 5, 6]])

A *= 5

Matrix Produkt

out kann auch für numpy.dot angegeben werden.

import numpy as np

A = np.array([[1, 2, 3],
              [4, 5, 6]])
B = np.array([[7, 8, 9],
              [8, 7, 6]])

C = np.zeros((2, 2))

#Matrixprodukt, das kein neues Array generiert
np.dot(A, B.T, out=C)

Verwenden Sie außerdem beim Multiplizieren mehrerer Matrizen numpy.linalg.multi_dot, um das Matrixprodukt in der effizientesten Reihenfolge zu erhalten. Hier kann jedoch nicht "out" angegeben werden.

Recommended Posts

numpy Speicher wiederverwenden Spickzettel
Curry Spickzettel
SQLite3 Spickzettel
pyenv Spickzettel
conda Befehl Spickzettel
PIL / Kissen Spickzettel
ps Befehl Spickzettel
Spark API Spickzettel
Python3 Spickzettel (Basic)
PySpark Cheet Sheet [Python]
Python-Spickzettel
Tox Einstellungsdatei Spickzettel
[Python3] Standardeingabe [Cheet Sheet]
Data Science Cheet Sheet (Python)
Slack API Anhänge Spickzettel
Python Django Tutorial Cheet Sheet
Scikit lernen Algorithmus Spickzettel
Apache Beam Cheet Sheet [Python]
Persönlicher Spickzettel von Google Test / Mock
CPS-Spickzettel (Continuous Delivery Style)
Python-Spickzettel (für C ++ erfahren)