Mam dwie matryce
a = np.matrix([[1,2], [3,4]])
b = np.matrix([[5,6], [7,8]])
i chcę uzyskać iloczyn elementarny [[1*5,2*6], [3*7,4*8]]
równy
[[5,12], [21,32]]
próbowałem
print(np.dot(a,b))
i
print(a*b)
ale oba dają wynik
[[19 22], [43 50]]
który jest iloczynem macierzy, a nie iloczynem elementarnym. Jak mogę uzyskać produkt elementarny (znany również jako produkt Hadamarda) za pomocą wbudowanych funkcji?
a
ib
nie jest to typ macierzy NumPy? W przypadku tej klasy*
zwraca iloczyn skalarny, a nie elementarny. Ale dla zwykłejndarray
klasy*
oznacza produkt elementarny.a
ib
numpy? Ponadto w swoim pytaniu powyżej używaszx
iy
do obliczeń zamiasta
ib
. Czy to tylko literówka?@
do mnożenia macierzy za pomocą tablic numpy, co oznacza, że nie powinno być absolutnie żadnego powodu, aby używać macierzy zamiast tablic.a
ib
być listami. Będą pracowaćnp.dot
; ale nie wa*b
. Jeśli używasznp.array(a)
lubnp.matrix(a)
,*
działa, ale z innymi wynikami.Odpowiedzi:
Do elementarnego mnożenia
matrix
obiektów możesz użyćnumpy.multiply
:Wynik
Jednak naprawdę powinieneś używać
array
zamiastmatrix
.matrix
obiekty mają różnego rodzaju okropne niezgodności ze zwykłymi ndarrayami. Z ndarrays, możesz po prostu użyć*
do mnożenia elementów:Jeśli korzystasz z Pythona 3.5+, nie tracisz nawet możliwości wykonywania mnożenia macierzy za pomocą operatora, ponieważ
@
teraz robi to mnożenie macierzy :źródło
po prostu zrób to:
źródło
*
operator wydaje się wykonywać mnożenie według elementów.Oba
np.multiply
i*
dałyby mądre mnożenie elementów znane jako Produkt Hadamarda%timeit
to magia ipythonźródło
Spróbuj tego:
Tutaj
np.array(a)
zwraca tablicę 2D typu,ndarray
a pomnożenie dwóchndarray
spowoduje pomnożenie elementów. Wynik byłby więc:Jeśli chcesz zdobyć matrycę, zrób to za pomocą tego:
źródło