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?
a
yb
no eres el tipo de matriz de NumPy? Con esta clase,*
devuelve el producto interno, no el elemento. Pero para landarray
clase habitual ,*
significa producto basado en elementos.a
yb
matrices numpy? Además, en su pregunta anterior, está utilizandox
yy
para el cálculo en lugar dea
yb
. ¿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.a
yb
son 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
matrix
objetos por elementos, puede utilizarnumpy.multiply
:Resultado
Sin embargo, debería utilizar en
array
lugar dematrix
.matrix
Los 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.multiply
y*
producirían una multiplicación sabia de elementos conocida como el Producto Hadamard%timeit
es magia ipythonfuente
Prueba esto:
Aquí,
np.array(a)
devuelve una matriz 2D de tipondarray
y la multiplicación de dosndarray
daría como resultado una multiplicación de elementos. Entonces el resultado sería:Si quieres obtener una matriz, hazlo con esto:
fuente