Je veux effectuer une multiplication élément par élément, multiplier deux listes par valeur en Python, comme nous pouvons le faire dans Matlab.
C'est comme ça que je le ferais dans Matlab.
a = [1,2,3,4]
b = [2,3,4,5]
a .* b = [2, 6, 12, 20]
Une compréhension de liste donnerait 16 entrées de liste, pour chaque combinaison x * y
de x
from a
et y
from b
. Je ne sais pas comment cartographier cela.
Si quelqu'un est intéressé par la raison, j'ai un ensemble de données et je veux le multiplier par Numpy.linspace(1.0, 0.5, num=len(dataset)) =)
.
Réponses:
Utilisez une compréhension de liste mélangée avec
zip()
:.la source
map(lambda x,y:x*y,lista,listb)
.listb
qu'une liste d'éléments de typelistb
et que nous devons opérer pour obtenir une liste unique. Ex. (x, pi, e) avec [(4, 5, 2), (1, 2, 4), (4, 5, 6), (1, 1, 2), (3, 3, 4)], lorsqu'il est pris (x, pi, e) opéré avec (4, 5, 2) puis (x, pi, e) opéré avec (1, 2, 4) ... ainsi de suite.Puisque vous utilisez déjà
numpy
, il est logique de stocker vos données dans unnumpy
tableau plutôt que dans une liste. Une fois que vous faites cela, vous obtenez des choses comme des produits élémentaires gratuitement:la source
Utilisez np.multiply (a, b):
la source
Vous pouvez essayer de multiplier chaque élément dans une boucle. La petite main pour faire cela est
la source
Encore une autre réponse:
-1
... nécessite une importation+1
... est très lisiblesorties [10, 22, 36, 52]
la source
Façon assez intuitive de faire cela:
la source
vous pouvez multiplier en utilisant
lambda
la source
Pour les grandes listes, nous pouvons le faire de manière itérative:
product_iter_object.next()
donne chacun des éléments de la liste de sortie.La sortie serait la longueur de la plus courte des deux listes d'entrée.
la source
créer un tableau de ceux; multipliez chaque liste par le tableau; convertir un tableau en liste
la source
La réponse de gahooa est correcte pour la question telle que formulée dans l'en-tête, mais si les listes sont déjà au format numpy ou supérieures à dix, elles seront BEAUCOUP plus rapides (3 ordres de grandeur) et plus lisibles, pour faire une simple multiplication numpy comme suggéré par NPE. Je reçois ces horaires:
c'est-à-dire à partir du programme de test suivant.
la source
Peut utiliser enumerate.
la source
La
map
fonction peut être très utile ici. En utilisant,map
nous pouvons appliquer n'importe quelle fonction à chaque élément d'un itérable.Python 3.x
Bien sûr:
est équivalent à
Nous pouvons donc obtenir notre solution via:
En Python 2.x
map()
signifie: appliquer une fonction à chaque élément d'un itérable et construire une nouvelle liste. Dans Python 3.x,map
construisez des itérateurs au lieu de listes.Au lieu de
my_mul
nous pourrions utiliser l'mul
opérateurPython 2.7
Python 3.5+
Veuillez noter que puisque
map()
construit un itérateur, nous utilisons l'*
opérateur de décompression itérable pour obtenir une liste. L'approche de déballage est un peu plus rapide que lelist
constructeur:la source
Pour conserver le type de liste et le faire en une seule ligne (après avoir importé numpy en tant que np, bien sûr):
ou
la source
vous pouvez l'utiliser pour des listes de même longueur
la source