web-dev-qa-db-fra.com

Appeler un lambda avec un tableau numpy

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?

3
peco

numpy.ndarraysurcharge l'opérateur * en définissant sa propre méthode __mul__. De même pour +, -, etc. Cela permet l'arithmétique vectorielle.

2
Crispin

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

1
Shivkumar kondi

Ce sont deux objets différents qui se comportent différemment lorsque vous utilisez * opérateur sur eux.

  1. 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.

  2. 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
0
drorco