[PYTHON] feuille de triche de réutilisation de la mémoire numpy

introduction

Pour ceux qui travaillent avec de grandes matrices, malloc / realloc pour les matrices est une question vitale. Les personnes maléfiques qui veulent recycler la mémoire devraient jeter un coup d'œil à cette courte feuille de triche.

Initialisation de la baie

Il peut arriver que vous souhaitiez remplir le tableau avec 0, par exemple au début d'une boucle. Utilisez numpy.ndarray.fill pour remplir un tableau déjà alloué avec une certaine valeur.

import numpy as np

a = np.ones(5)

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

Copie du tableau

Utilisez numpy.copyto si vous souhaitez copier le contenu d'un tableau dans un autre tableau. Notez que numpy.copy générera un nouveau tableau.

import numpy as np

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

#Une copie qui ne génère pas de nouveau tableau
np.copyto(B, A)

Si vous souhaitez sécuriser un grand tableau et le remplir dès le début avec un petit tableau, vous pouvez utiliser des tranches. Si vous voulez remplir la partie restante avec 0, utilisez le fill ci-dessus pour le traiter.

import numpy as np

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

np.copyto(a[0:3], b)  #Remplissez avec de petites valeurs de tableau depuis le début
a[3:5].fill(0)        #Remplissez la partie restante avec 0

Manipulation mathématique

Pour les opérations mathématiques, la destination de stockage peut être spécifiée pour celles qui peuvent prendre ʻout` comme argument. Même si vous ne pouvez pas l'obtenir, il y a des moments où vous ne jouez pas avec la séquence elle-même.

Quatre règles / autres

Les opérations qui peuvent spécifier le paramètre de ʻout` dans Fonctions mathématiques utilisent la mémoire. La «forme» du réseau peut être différente tant qu'elle se trouve dans la plage que la diffusion peut gérer. Si la destination de l'affectation correspond à la matrice d'origine, vous pouvez utiliser un opérateur d'affectation tel que «+ =».

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)

#Quatre règles d'opérations qui ne génèrent pas de nouveau tableau
np.add(A, B, out=C)
np.multiply(A, B, out=C)
np.subtract(A, B, out=C)
np.divide(A, B, out=C)

#Modèles utilisant des opérateurs d'affectation
A += B
A -= B
A *= B
A /= B

Notez que ʻA = A + B crée une nouvelle matrice et l'assigne à ʻA.

Translocation

Le transfert ne fait que jouer avec le paramètre appelé strides C'est rapide car la séquence elle-même n'est pas falsifiée.

import numpy as np

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

#La translocation ne génère pas de nouvelle séquence
B = A.T

B[0,1] = 9

print(A)

output


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

Bien que non présenté dans cet article, «remodeler» est également rapide car l'ordre de l'arrangement lui-même n'a pas changé.

Temps scalaires

Vous pouvez utiliser l'opérateur * =.

import numpy as np

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

A *= 5

Produit matriciel

Vous pouvez également spécifier ʻout pour numpy.dot`.

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))

#Produit matriciel qui ne génère pas de nouvelle baie
np.dot(A, B.T, out=C)

En passant, lors de la multiplication de plusieurs matrices, utilisez numpy.linalg.multi_dot pour obtenir les produits de la matrice dans l'ordre le plus efficace. Cependant, ʻout` ne peut pas être spécifié ici.

Recommended Posts

feuille de triche de réutilisation de la mémoire numpy
Aide-mémoire au curry
Aide-mémoire SQLite3
feuille de triche pyenv
feuille de triche de commande conda
Aide-mémoire PIL / Pillow
feuille de triche de commande ps
Aide-mémoire de l'API Spark
Aide-mémoire Python3 (basique)
Fiche technique PySpark [Python]
Feuille de triche de tri Python
feuille de triche de fichier de réglage tox
[Python3] Entrée standard [Cheet sheet]
Fiche technique de la science des données (Python)
Aide-mémoire sur les pièces jointes de l'API Slack
Fiche technique du didacticiel Python Django
feuille de triche de l'algorithme scikit learn
Apache Beam Cheet Sheet [Python]
Aide-mémoire personnel Google Test / Mock
Aide-mémoire sur le style de livraison continue (CPS)
Aide-mémoire Python (pour les expérimentés C ++)