Eu tenho duas matrizes
a = np.matrix([[1,2], [3,4]])
b = np.matrix([[5,6], [7,8]])
e eu quero obter o produto com base em elementos [[1*5,2*6], [3*7,4*8]]
, igualando
[[5,12], [21,32]]
eu tentei
print(np.dot(a,b))
e
print(a*b)
mas ambos dão o resultado
[[19 22], [43 50]]
que é o produto da matriz, não o produto do elemento sábio. Como posso obter o produto element-wise (também conhecido como produto Hadamard) usando funções integradas?
a
eb
não é o tipo de matriz do NumPy? Com esta classe,*
retorna o produto interno, não a nível de elemento. Mas para andarray
classe normal ,*
significa produto com base no elemento.a
eb
matrizes entorpecidas? Além disso, em sua pergunta acima, você está usandox
ey
para cálculo em vez dea
eb
. Isso é apenas um erro de digitação?@
para multiplicação de matrizes com arrays numpy, o que significa que não deve haver absolutamente nenhuma boa razão para usar matrizes em vez de arrays.a
eb
listas. Eles vão trabalharnp.dot
; mas não dentroa*b
. Se você usarnp.array(a)
ounp.matrix(a)
,*
funciona , mas com resultados diferentes.Respostas:
Para a multiplicação elementar de
matrix
objetos, você pode usarnumpy.multiply
:Resultado
No entanto, você realmente deve usar em
array
vez dematrix
.matrix
objetos têm todos os tipos de incompatibilidades horríveis com ndarrays regulares. Com ndarrays, você pode usar apenas*
para multiplicação de elemento:Se você estiver no Python 3.5+, você nem mesmo perderá a capacidade de realizar a multiplicação da matriz com um operador, porque
@
a multiplicação da matriz agora :fonte
apenas faça isso:
fonte
*
operador parece fazer multiplicação por elemento.Ambos
np.multiply
e*
resultariam na multiplicação elementar conhecida como Produto Hadamard%timeit
é ipython mágicofonte
Experimente isto:
Aqui,
np.array(a)
retorna uma matriz 2D do tipondarray
e a multiplicação de doisndarray
resultaria na multiplicação elemento sábio. Portanto, o resultado seria:Se você quiser obter uma matriz, faça isso com:
fonte