En me familiarisant avec numpy
, j'ai remarqué un comportement intéressant dans les tableaux numpy
:
import numpy as np
arr = np.array([1, 2, 3])
scale = lambda x: x * 3
scale(arr) # Gives array([3, 6, 9])
Comparez cela avec les listes Python normales:
arr = [1, 2, 3]
scale = lambda x: x * 3
scale(arr) # Gives [1, 2, 3, 1, 2, 3, 1, 2, 3]
Je suis curieux de savoir comment cela est possible. Un tableau numpy
remplace-t-il l'opérateur de multiplication ou quelque chose?
numpy.ndarray
surcharge l'opérateur *
en définissant sa propre méthode __mul__
. De même pour +
, -
, etc. Cela permet l'arithmétique vectorielle.
Tout est sur Remplacement opérateurs en Numpy
Vous pouvez apprendre numpy.arry ici
Laissez-nous nous concentrer sur votre fonction lamda pour chacun;
1. numpy tableau:
arr = numpy.array([1, 2, 3])
type(arr)
scale = lambda x: x * 3
scale(arr)
cela prend chaque élément du tableau
2. liste normale:
a =[1,2,3]
type(a)
scale = lambda x: x * 3
scale(a)
cela prend la liste complète en tant que x et multiplie la liste ici elle-même
Ce sont deux objets différents qui se comportent différemment lorsque vous utilisez * opérateur sur eux.
Dans le premier cas, vous générez un tableau numpy. Dans ce cas, l'opérateur * était surchargé pour effectuer la multiplication. c'est-à-dire que chaque élément sera multiplié par 3.
Dans le second cas, vous générez une liste. Dans ce cas, l'opérateur * est traité en tant qu'opérateur de répétition et la liste complète est répétée 3 fois.
exemple de code:
type(np.array([1,2,3]))
type([1, 2, 3])
résultat:
list
numpy.ndarray