Quiero realizar una multiplicación sabia de elementos, para multiplicar dos listas juntas por valor en Python, como podemos hacerlo en Matlab.
Así es como lo haría en Matlab.
a = [1,2,3,4]
b = [2,3,4,5]
a .* b = [2, 6, 12, 20]
Una comprensión de la lista daría 16 entradas de lista, por cada combinación x * yde xfrom ay yfrom b. No estoy seguro de cómo mapear esto.
Si a alguien le interesa por qué, tengo un conjunto de datos y quiero multiplicarlo por Numpy.linspace(1.0, 0.5, num=len(dataset)) =).

Respuestas:
Use una lista de comprensión mezclada con
zip():.fuente
map(lambda x,y:x*y,lista,listb).listbuna lista de elementos de tipolistby se necesita operar para obtener una lista única? Ex. (x, pi, e) con [(4, 5, 2), (1, 2, 4), (4, 5, 6), (1, 1, 2), (3, 3, 4)], cuando se toma (x, pi, e) funciona con (4, 5, 2) y luego (x, pi, e) funciona con (1, 2, 4) ... y así sucesivamente.Como ya está utilizando
numpy, tiene sentido almacenar sus datos en unanumpymatriz en lugar de una lista. Una vez que haces esto, obtienes cosas como productos basados en elementos gratis:fuente
Use np.multiply (a, b):
fuente
Puedes intentar multiplicar cada elemento en un bucle. La mano corta para hacer eso es
fuente
Otra respuesta más:
-1... requiere importación+1... es muy legiblesalidas [10, 22, 36, 52]
fuente
Manera bastante intuitiva de hacer esto:
fuente
puedes multiplicar usando
lambdafuente
Para listas grandes, podemos hacerlo de la siguiente manera:
product_iter_object.next()da cada uno de los elementos en la lista de salida.La salida sería la longitud de la más corta de las dos listas de entrada.
fuente
crear una variedad de unos; multiplicar cada lista por la matriz; convertir matriz a una lista
fuente
La respuesta de gahooa es correcta para la pregunta tal como está redactada en el encabezado, pero si las listas ya tienen formato numpy o más de diez, será MUCHO más rápido (3 órdenes de magnitud) y más legible, para hacer una multiplicación numpy simple como lo sugiere NPE. Tengo estos horarios:
es decir, del siguiente programa de prueba.
fuente
Puede usar enumerate.
fuente
La
mapfunción puede ser muy útil aquí. Usandomappodemos aplicar cualquier función a cada elemento de un iterable.Python 3.x
Por supuesto:
es equivalente a
Para que podamos obtener nuestra solución a través de:
En Python 2.x
map()significa: aplicar una función a cada elemento de un iterable y construir una nueva lista. En Python 3.x,mapconstruya iteradores en lugar de listas.En lugar de
my_mulpodríamos usarmuloperadorPython 2.7
Python 3.5+
Tenga en cuenta que, dado que
map()construye un iterador, utilizamos un*operador de desempaquetado iterable para obtener una lista. El enfoque de desempaquetado es un poco más rápido que ellistconstructor:fuente
Para mantener el tipo de lista y hacerlo en una línea (después de importar numpy como np, por supuesto):
o
fuente
puedes usar esto para listas de la misma longitud
fuente