una tuplas tupla tamaño son recorrer qué metodos listas lista las convertir como arreglos python sum reduce map-function

tamaño - qué son las tuplas en python



Python cómo reducir en una lista de tuplas? (5)

Puedo usar map y sum para lograr esta funcionalidad, pero ¿cómo usar reduce ?

Hay 2 listas: a , b , tienen el mismo número de valores. Quiero calcular

a[0]*b[0]+a[1]*b[1]+...+a[n]*b[n]

La versión de trabajo que escribí usando map es

value = sum(map(lambda (x,y): x*y, zip(a, b)))

Cómo usar reduce entonces? Escribí:

value = reduce(lambda (x,y): x[0]*y[0] + x[1]*y[1], zip(a, b)))

Obtuve el error " TypeError: ''float'' object is unsubscriptable ".

¿Alguien puede arrojar algo de luz sobre esto?


El primer argumento de la función lambda es la suma hasta el momento y el segundo argumento es el siguiente par de elementos:

value = reduce(lambda sum, (x, y): sum + x*y, zip(a, b), 0)


Lo haría de esta manera (no creo que necesites lambda) ...

sum(x*y for x, y in zip(a, b))

Esto también parece un poco más explícito. Zip AB, multiplíquelos y resuma los términos.


Una solución que usa reduce y map ,

from operator import add,mul a = [1,2,3] b = [4,5,6] print reduce(add,map(mul,a,b))


Las dificultades con reduce ocurren cuando tienes un mapa incorrecto.

Tomemos expresión: value = sum(map(lambda (x,y): x*y, zip(a, b)))

Mapa es transformación Necesitamos convertir las tuplas en valores planos simples . En tu caso, se verá así:

map(lambda x: x[0]*x[1], zip(a,b))

Y luego, si desea expresar la sum través de reduce , se verá así:

reduce(lambda x,y: x + y, map)

Entonces, aquí hay un ejemplo :

a = [1,2,3] b = [4,5,6] l = zip(a,b) m = map(lambda x: x[0]*x[1], l) r = reduce(lambda x,y: x + y, m)


parece que quieres un producto interno. usa un producto interno https://docs.scipy.org/doc/numpy/reference/generated/numpy.inner.html

np.inner(a, b) = sum(a[:]*b[:])

Producto interno ordinario para vectores:

a = np.array([1,2,3]) b = np.array([0,1,0]) np.inner(a, b)

salida: 2

Un ejemplo multidimensional:

a = np.arange(24).reshape((2,3,4)) b = np.arange(4) np.inner(a, b)

salida: array ([[14, 38, 62], [86, 110, 134]])