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 * y
de x
from a
y y
from 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)
.listb
una lista de elementos de tipolistb
y 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 unanumpy
matriz 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
lambda
fuente
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
map
función puede ser muy útil aquí. Usandomap
podemos 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,map
construya iteradores en lugar de listas.En lugar de
my_mul
podríamos usarmul
operadorPython 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 ellist
constructor: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