Tengo dos matrices
a = np.matrix([[1,2], [3,4]])
b = np.matrix([[5,6], [7,8]])
y quiero obtener el producto por elementos [[1*5,2*6], [3*7,4*8]], igual
[[5,12], [21,32]]
Yo he tratado
print(np.dot(a,b))
y
print(a*b)
pero ambos dan el resultado
[[19 22], [43 50]]
que es el producto de la matriz, no el producto de elementos. ¿Cómo puedo obtener el producto basado en elementos (también conocido como producto Hadamard) utilizando funciones integradas?

aybno eres el tipo de matriz de NumPy? Con esta clase,*devuelve el producto interno, no el elemento. Pero para landarrayclase habitual ,*significa producto basado en elementos.aybmatrices numpy? Además, en su pregunta anterior, está utilizandoxyypara el cálculo en lugar deayb. ¿Es solo un error tipográfico?@para la multiplicación de matrices con matrices numpy, lo que significa que no debería haber absolutamente ninguna buena razón para usar matrices sobre matrices.aybson listas. Trabajarán ennp.dot; pero no ena*b. Si usanp.array(a)onp.matrix(a),*funciona pero con resultados diferentes.Respuestas:
Para la multiplicación de
matrixobjetos por elementos, puede utilizarnumpy.multiply:Resultado
Sin embargo, debería utilizar en
arraylugar dematrix.matrixLos objetos tienen todo tipo de incompatibilidades horribles con los ndarrays regulares. Con ndarrays, puede usarlo*para la multiplicación por elementos:Si está en Python 3.5+, ni siquiera pierde la capacidad de realizar la multiplicación de matrices con un operador, porque
@la multiplicación de matrices ahora :fuente
solo haz esto:
fuente
*operador parece hacer una multiplicación de elementos.Ambos
np.multiplyy*producirían una multiplicación sabia de elementos conocida como el Producto Hadamard%timeites magia ipythonfuente
Prueba esto:
Aquí,
np.array(a)devuelve una matriz 2D de tipondarrayy la multiplicación de dosndarraydaría como resultado una multiplicación de elementos. Entonces el resultado sería:Si quieres obtener una matriz, hazlo con esto:
fuente