ylab examples color python dot-product

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))



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