python - examples - r plotly axis format
¿Cuál es la forma pitónica de calcular el producto de puntos? (10)
Esto podría ser una solución repetida, sin embargo:
>>> u = [(1, 2, 3), (4, 5, 6)]
>>> v = [3, 7]
En Python
llano:
>>> sum([x*y for (x, *x2), y in zip(u,v)])
31
O usando numpy
(como se describe en la respuesta del user57368 ):
import numpy as np
>>> np.dot(np.array(u)[:,0], v)
31
Tengo dos listas, una se llama como A, la otra se llama B. Cada elemento en A es triple, y cada elemento en B es solo un número. Me gustaría calcular el resultado definido como:
resultado = A [0] [0] * B [0] + A [1] [0] * B [1] + ... + A [n-1] [0] * B [n-1]
Sé que la lógica es fácil pero, ¿cómo escribir de forma pitónica?
¡Gracias!
Mi producto de punto de Pythonic favorito es:
sum([i*j for (i, j) in zip(list1, list2)])
Así que para tu caso podríamos hacer:
sum([i*j for (i, j) in zip([K[0] for K in A], B)])
Probablemente, la forma más pitónica para este tipo de cosas es usar numpy . ;-)
Python 3.5 tiene un operador explícito @
para el producto punto, por lo que puede escribir
a = A @ B
en lugar de
a = numpy.dot(A,B)
Todas las respuestas anteriores son correctas, pero en mi opinión, la forma más pirónica de calcular el producto de puntos es:
>>> a=[1,2,3]
>>> b=[4,5,6]
>>> sum(map(lambda pair:pair[0]*pair[1],zip(a,b)))
32
Usando more_itertools
, una biblioteca de terceros que implementa la receta dotproduct
dotproduct :
import more_itertools as mit
a = [1, 2, 3]
b = [7, 8, 9]
mit.dotproduct(a, b)
# 50
Utilizando el operador y los módulos de itertools:
from operator import mul
from itertools import imap
sum(imap(mul, A, B))
from operator import mul
sum(map(mul, A, B))
import numpy
result = numpy.dot( numpy.array(A)[:,0], B)
http://docs.scipy.org/doc/numpy/reference/
Si quieres hacerlo sin adormecer, prueba
sum( [a[i][0]*b[i] for i in range(len(b))] )
>>> X = [2,3,5,7,11]
>>> Y = [13,17,19,23,29]
>>> dot = lambda X, Y: sum(map(lambda x, y: x * y, X, Y))
>>> dot(X, Y)
652
Y eso es.