Chcę wykonać mądre mnożenie elementów, aby pomnożyć razem dwie listy przez wartość w Pythonie, tak jak możemy to zrobić w Matlabie.
Tak bym to zrobił w Matlabie.
a = [1,2,3,4]
b = [2,3,4,5]
a .* b = [2, 6, 12, 20]
Lista rozumienie dałoby 16 Lista pozycji, dla każdej kombinacji x * y
z x
od a
i y
od b
. Nie wiem, jak to zmapować.
Jeśli ktoś jest zainteresowany dlaczego, mam zbiór danych i chcę go pomnożyć przez Numpy.linspace(1.0, 0.5, num=len(dataset)) =)
.
Odpowiedzi:
Użyj zrozumieniem zmieszanej z listy
zip()
.źródło
map(lambda x,y:x*y,lista,listb)
.listb
raczej listy elementów typulistb
podano nam i musimy operować, aby otrzymać jedną listę. Dawny. (x, pi, e) z [(4, 5, 2), (1, 2, 4), (4, 5, 6), (1, 1, 2), (3, 3, 4)], gdy wzięty (x, pi, e) działa z (4, 5, 2), a następnie (x, pi, e) działa z (1, 2, 4) ... tak dalej.Ponieważ już używasz
numpy
, sensowne jest przechowywanie danych wnumpy
tablicy, a nie na liście. Gdy to zrobisz, otrzymasz bezpłatnie takie rzeczy, jak produkty oparte na elementach:źródło
Użyj np.multiply (a, b):
źródło
Możesz spróbować pomnożyć każdy element w pętli. Krótka ręka za to
źródło
Jeszcze inna odpowiedź:
-1
... wymaga importu+1
... jest bardzo czytelnywyjścia [10, 22, 36, 52]
źródło
Dość intuicyjny sposób na zrobienie tego:
źródło
możesz pomnożyć używając
lambda
źródło
W przypadku dużych list możemy to zrobić iteracyjnie:
product_iter_object.next()
podaje każdy element na liście wyników.Wynik byłby długością krótszej z dwóch list wejściowych.
źródło
utwórz tablicę jedynek; pomnóż każdą listę razy tablicę; przekonwertować tablicę na listę
źródło
Odpowiedź gahooa jest poprawna dla pytania sformułowanego w nagłówku, ale jeśli listy są już w formacie numpy lub są większe niż dziesięć, będzie DUŻO szybsze (3 rzędy wielkości), a także bardziej czytelne, aby wykonać proste mnożenie liczbowe, jak sugeruje NPE. Otrzymuję te czasy:
tj. z następującego programu testowego.
źródło
Może użyć enumerate.
źródło
Ta
map
funkcja może być tutaj bardzo przydatna. Używającmap
możemy zastosować dowolną funkcję do każdego elementu iterowalnego.Python 3.x
Oczywiście:
jest równa
Więc możemy uzyskać nasze rozwiązanie poprzez:
W Pythonie 2.x
map()
oznacza: zastosuj funkcję do każdego elementu iterowalnego i skonstruuj nową listę. W Pythonie 3.xmap
konstruuj iteratory zamiast list.Zamiast tego
my_mul
moglibyśmy użyćmul
operatoraPython 2.7
Python 3.5+
Zwróć uwagę, że ponieważ
map()
konstruuje iterator, używamy*
iterowalnego operatora rozpakowywania, aby uzyskać listę. Rozpakowywanie jest nieco szybsze niżlist
konstruktor:źródło
Aby zachować typ listy i zrób to w jednej linii (oczywiście po zaimportowaniu numpy jako np):
lub
źródło
możesz tego użyć do list o tej samej długości
źródło