Introduction
Lorsque vous travaillez avec de grands ensembles de données en Python, il est souvent nécessaire d'appliquer des fonctions élément par élément à plusieurs tableaux NumPy. Cela signifie que la fonction sera appliquée à chaque élément des tableaux individuellement, ce qui donnera un nouveau tableau de même forme que les originaux.
Table des matières
Dans ce guide, nous explorerons différentes méthodes pour appliquer efficacement des fonctions élément par élément à plusieurs tableaux NumPy en Python.
En utilisant la méthode numpy.ufunc.reduce()
La méthode numpy.ufunc.reduce() est un moyen efficace d'effectuer des opérations élémentaires sur plusieurs tableaux NumPy en Python.
Pour utiliser cette méthode, vous devez d'abord importer la bibliothèque NumPy dans votre code. Une fois importée, vous pouvez utiliser la méthode reduce() sur n'importe quelle fonction universelle NumPy (ufunc).
Pour démontrer sa fonctionnalité, définissons trois tableaux de même taille et dimensions:
import numpy as np
np.random.seed(42) # Generate the same random numbers
A = np.random.randint(0,10,(1,5))
B = np.random.randint(0,10,(1,5))
C = np.random.randint(0,10,(1,5))
print(A)
print(B)
print(C)
Le code fourni générera ici trois tableaux dans l'ordre suivant.
[[6 3 7 4 6]]
[[9 2 6 7 4]]
[[3 7 7 2 5]]
Addition élément par élément entre plusieurs tableaux NumPy
np.add.reduce([A,B,C])
Dans cet exemple, la fonction add() est appliquée à chaque élément des deux tableaux et les résultats sont ensuite additionnés à l'aide de la méthode reduce().
array([[18, 12, 20, 13, 15]])
Un avantage de l'utilisation de numpy.ufunc.reduce() est son efficacité. Il peut gérer de grandes matrices et effectuer les opérations beaucoup plus rapidement que l'utilisation de boucles traditionnelles for.
Multiplication élément par élément entre plusieurs tableaux NumPy.
Si nous voulons effectuer une multiplication élément par élément entre eux et réduire le résultat à un seul tableau, nous pouvons simplement utiliser la fonction np.multiply.reduce() comme suit :
np.multiply.reduce([A,B,C])
Le code fourni générera
array([[162, 42, 294, 56, 120]])
Maximum élément par élément entre plusieurs tableaux NumPy
Prenons un exemple simple pour comprendre comment cela fonctionne:
import numpy as np
np.random.seed(42) # Generate the same random numbers
A = np.random.randint(0,10,(4,5)) # dataset 1
B = np.random.randint(0,10,(4,5)) # dataset 2
C = np.random.randint(0,15,(4,5)) # dataset 2
Output A
[[6 3 7 4 6]
[9 2 6 7 4]
[3 7 7 2 5]
[4 1 7 5 1]]
Output B
[[4 0 9 5 8]
[0 9 2 6 3]
[8 2 4 2 6]
[4 8 6 1 3]]
Output C
[[ 8 11 13 1 9]
[ 8 9 4 1 3]
[11 14 11 6 11]
[12 7 14 2 13]]
Une opération courante consiste à trouver le maximum élément par élément entre deux ou plusieurs tableaux. La syntaxe de base pour cette opération est la suivante :
np.maximum.reduce([A,B,C])
La forme du tableau de sortie sera identique à celle des tableaux d'entrée.
array([[ 8, 11, 13, 5, 9],
[ 9, 9, 6, 7, 4],
[11, 14, 11, 6, 11],
[12, 8, 14, 5, 13]])
Créez votre propre ufunc personnalisée
Utilisant les tableaux mentionnés précédemment, procédons comme suit:
import numpy as np
np.random.seed(42) # Generate the same random numbers
A = np.random.randint(0,10,(4,5)) # dataset 1
B = np.random.randint(0,10,(4,5)) # dataset 2
C = np.random.randint(0,15,(4,5)) # dataset 2
Créons notre propre fonction de base qui accepte deux tableaux numpy en entrée et effectue une opération élémentaire simple :
def myfunc(x1,x2):
data = np.add(x1,x2) + 1
return data
Appliquer cette fonction à deux tableaux
myfunc(A,B)
produit le résultat suivant :
array([[11, 4, 17, 10, 15],
[10, 12, 9, 14, 8],
[12, 10, 12, 5, 12],
[ 9, 10, 14, 7, 5]])
Pour appliquer cette fonction élément par élément à plusieurs tableaux en utilisant la méthode reduce(), nous devons d'abord la transformer en ufunc :
my_ufunc = np.frompyfunc(myfunc, 2, 1)
Maintenant, nous pouvons faire :
my_ufunc.reduce([A,B,C])
ce qui donnera le résultat suivant :
array([[20, 16, 31, 12, 25],
[19, 22, 14, 16, 12],
[24, 25, 24, 12, 24],
[22, 18, 29, 10, 19]], dtype=object)
Références
Liens | Site |
---|---|
numpy.ufunc.reduce | numpy.org |
numpy.ufunc | numpy.org |
numpy_ufunc_create_function | www.w3schools.com |
How to only keep the maximum value of two numpy arrays ? | moonbooks.org |