Hadamard-produkten [1] ( Schur-produkt [2] , komponentvis produkt ) är en binär operation på två matriser av samma dimension, vars resultat är en matris av samma dimension, där varje element med index är produkten av element med index för de ursprungliga matriserna. Operationen är uppkallad efter den franske matematikern Jacques Hadamard och den tyske matematikern Isai Schur .
För två matriser med samma dimension definieras Hadamard-produkten som den komponentmässiga produkten av två matriser:
För två matriser som har olika dimensioner är Hadamard-produkten inte definierad.
Exempel för 3×3-matriser:
.Är en associativ och distribuerande operation och är, till skillnad från den vanliga matrisprodukten, kommutativ :
, , .Egenskaper för blandade produkter med andra varianter av matrismultiplikation:
, var är Kronecker - produkten ; , var är slutprodukten [3] ; , var är Khatri-Rao kolumnprodukten .Används i komprimeringsalgoritmer med förlust , såsom JPEG .
I mjukvarupaketen MATLAB och GNU Octave används operationen som en standardmatrismultiplikationsoperation och betecknas med symbolen ".*" [4] .
Produktoperationen på vektordatatyper i GPGPU -programmeringsteknologier implementeras också enligt Hadamard-produktprincipen. Andra primitiva matematiska operationer på vektordatatyper implementeras som komponentvisa operationer på deras komponenter.
Denna typ av matrisoperation är baserad på Hadamard-produkten och låter dig multiplicera matriselement för element med ett godtyckligt antal block av samma dimension , vilket bildar en blockmatris [5] :
.Till exempel för
vi får:
.Huvudegenskaper :
; ,var är symbolen för slutprodukten av matriser.
, var är en vektor.Denna typ av matrismultiplikation föreslogs 1998 av Slyusar V.I. att beskriva svaren från en digital antennuppsättning med icke-identiska mottagningskanaler [5] . Dessutom låter detta arbete dig formalisera funktionen av ett konvolutionellt neuralt nätverk. Om vi till exempel betraktar den angivna matrisen som en array av bildpixlar vid ingången till den neurala nätverksalgoritmen, kommer blocken i matrisen att motsvara olika uppsättningar av koefficienter som används för att bilda ett faltningslager i flera parallella kanaler för bildbehandling av ett neuralt nätverk [6] .
Driften av den penetrerande slutprodukten av en vektor och en matris är implementerad i TensorFlows maskininlärningsbibliotek med den inbyggda funktionen "tf.multiply" [6] [7] .