Quand j'ai essayé de calculer w^T * x
en utilisant numpy, c'était super confus pour moi aussi. En fait, je n'ai pas pu l'implémenter moi-même. C'est donc l'un des rares problèmes de NumPy avec lequel nous devons nous familiariser.
En ce qui concerne Tableau 1D est concerné, il y a aucune distinction entre un vecteur ligne et un vecteur colonne . Ils sont exactement les mêmes.
Regardez les exemples suivants, où nous obtenons le même résultat dans tous les cas, ce qui n'est pas vrai dans ( le sens théorique de ) l'algèbre linéaire :
In [37]: w
Out[37]: array([0, 1, 2, 3, 4])
In [38]: x
Out[38]: array([1, 2, 3, 4, 5])
In [39]: np.dot(w, x)
Out[39]: 40
In [40]: np.dot(w.transpose(), x)
Out[40]: 40
In [41]: np.dot(w.transpose(), x.transpose())
Out[41]: 40
In [42]: np.dot(w, x.transpose())
Out[42]: 40
Avec cette information, essayons maintenant de calculer la longueur au carré du vecteur |w|^2
.
Pour cela, nous devons transformer w
en tableau 2D.
In [51]: wt = w[:, np.newaxis]
In [52]: wt
Out[52]:
array([[0],
[1],
[2],
[3],
[4]])
Maintenant, calculons la longueur au carré (ou la magnitude au carré) du vecteur w
:
In [53]: np.dot(w, wt)
Out[53]: array([30])
Notez que nous avons utilisé w
, wt
au lieu de wt
, w
(comme dans l'algèbre linéaire théorique) en raison d'un décalage de forme avec l'utilisation de np.dot(wt, w). Ainsi, nous avons la longueur au carré du vecteur comme suit [30]
. Peut-être est-ce l'une des façons de distinguer (l'interprétation de numpy) les vecteurs ligne et colonne ?
Et enfin, ai-je mentionné que j'ai trouvé le moyen de mettre en œuvre w^T * x
? Oui, je l'ai fait :
In [58]: wt
Out[58]:
array([[0],
[1],
[2],
[3],
[4]])
In [59]: x
Out[59]: array([1, 2, 3, 4, 5])
In [60]: np.dot(x, wt)
Out[60]: array([40])
Ainsi, dans NumPy, l'ordre des opérandes est inversé, comme on le voit ci-dessus, contrairement à ce que nous avons étudié en algèbre linéaire théorique.
P.S. : problèmes potentiels dans numpy