Python comment réduire sur une liste de tuple?
Je suis en mesure d'utiliser map
et sum
pour obtenir cette fonctionnalité, mais comment les utiliser reduce
?
Il y a 2 listes: a
, b
, ils ont le même nombre de valeurs. Je veux calculer
a[0]*b[0]+a[1]*b[1]+...+a[n]*b[n]
La version de travail, j'ai écrit à l'aide de map
est
value = sum(map(lambda (x,y): x*y, zip(a, b)))
Comment utiliser reduce
alors? J'ai écrit:
value = reduce(lambda (x,y): x[0]*y[0] + x[1]*y[1], zip(a, b)))
J'ai eu l'erreur "TypeError: 'float' object is unsubscriptable
".
Quelqu'un peut jeter un peu de lumière sur cette?
Votre lambda prend deux à deux éléments de n-uplets. Cela fonctionne bien pour réduire les deux premiers éléments de votre liste, mais maintenant, la prochaine réduction de travailler sur la suite de votre lambda (qui est un float) et l'élément suivant de la liste (qui est un n-uplet), et votre lambda ne peut pas gérer. Votre lambda a besoin de prendre un numéro et d'un n-uplet, et le nombre de graines avec une valeur initiale (comme antonakos réponse n').
OriginalL'auteur zsong | 2011-04-07
Vous devez vous connecter pour publier un commentaire.
Le premier argument de la fonction lambda est la somme de la mesure et le deuxième argument est le suivant paire d'éléments:
>>> somme(a[:]*b[:]) fonctionne également
OriginalL'auteur antonakos
Je voudrais faire de cette façon (je ne pense pas que vous avez besoin lambda)...
Cela semble également un peu plus explicite. Zip AB, les multiplier, et la somme des termes.
sum(x*y for x,y in zip(a,b))
serait bien aussien effet, grâce
OriginalL'auteur Andrew White
Une solution à l'aide de
reduce
etmap
,OriginalL'auteur lafras
Difficultés à réduire se produire lorsque vous avez incorrecte de la carte.
Prenons l'expression:
value = sum(map(lambda (x,y): x*y, zip(a, b)))
Carte est la transformation. Nous en avons besoin pour convertir des n-uplets en simple plat de valeurs.
Dans votre cas, il va ressembler:
Et puis, si vous voulez exprimer
sum
viareduce
- elle ressemblera:Donc, ici, est exemple:
OriginalL'auteur Nikolay Fominyh
il semble que vous souhaitez un produit scalaire. l'utilisation d'un produit scalaire.
https://docs.scipy.org/doc/numpy/reference/generated/numpy.inner.html
Ordinaire produit scalaire de vecteurs:
de sortie: 2
Multidimensionnelle exemple:
de sortie: array([[ 14, 38, 62],[ 86, 110, 134]])
OriginalL'auteur chrisg