J'ai deux matrices
a = np.matrix([[1,2], [3,4]])
b = np.matrix([[5,6], [7,8]])
et je veux obtenir le produit élément par élément [[1*5,2*6], [3*7,4*8]]
, égalant
[[5,12], [21,32]]
j'ai essayé
print(np.dot(a,b))
et
print(a*b)
mais les deux donnent le résultat
[[19 22], [43 50]]
qui est le produit de la matrice, pas le produit élément par élément. Comment puis-je obtenir le produit élément par élément (alias produit Hadamard) à l'aide des fonctions intégrées?
a
etb
n'êtes pas le type de matrice de NumPy? Avec cette classe,*
renvoie le produit interne, pas par élément. Mais pour landarray
classe habituelle ,*
signifie produit élément par élément.a
et desb
tableaux numpy? De plus, dans votre question ci-dessus, vous utilisezx
ety
pour le calcul au lieu dea
etb
. Est-ce juste une faute de frappe?@
pour la multiplication de matrice avec des tableaux numpy, ce qui signifie qu'il ne devrait y avoir absolument aucune bonne raison d'utiliser des matrices sur des tableaux.a
etb
sont des listes. Ils travailleront dansnp.dot
; mais pas dedansa*b
. Si vous utiliseznp.array(a)
ounp.matrix(a)
,*
fonctionne mais avec des résultats différents.Réponses:
Pour la multiplication élémentaire des
matrix
objets, vous pouvez utilisernumpy.multiply
:Résultat
Cependant, vous devriez vraiment utiliser à la
array
place dematrix
.matrix
les objets ont toutes sortes d'incompatibilités horribles avec les ndarrays ordinaires. Avec ndarrays, vous pouvez simplement utiliser*
pour la multiplication élémentaire:Si vous utilisez Python 3.5+, vous ne perdez même pas la possibilité d'effectuer une multiplication matricielle avec un opérateur, car
@
la multiplication matricielle fait maintenant :la source
fais juste ceci:
la source
*
opérateur semble effectuer une multiplication par élément.Les deux
np.multiply
et*
donneraient une multiplication élémentaire connue sous le nom de produit Hadamard%timeit
est la magie d'ipythonla source
Essaye ça:
Ici,
np.array(a)
renvoie un tableau 2D de typendarray
et la multiplication de deuxndarray
entraînerait une multiplication élément par élément. Le résultat serait donc:Si vous voulez obtenir une matrice, faites-le avec ceci:
la source