Je souhaite calculer ce qui suit:
mais je ne sais pas comment faire cela en python, je ne veux pas l'implémenter manuellement mais utilisez une fonction prédéfinie pour cela, quelque chose de numpy par exemple.
Mais numpy
semble ignorer que xT doit être transposé.
Code:
import numpy as np x = np.array([1, 5]) print(np.dot(x, x.T)) # = 26, This is not the matrix it should be!
3 Réponses :
Vous pouvez faire:
[[ 1 5] [ 5 25]]
Votre x
d'origine est de forme (2,), alors que vous avez besoin d'une forme de (2,1). Une autre façon est de remodeler votre x
:
x = np.array([1, 5]).reshape(-1,1) print(np.dot(x, x.T))
.reshape (-1,1)
remodèle votre tableau pour avoir 1 et prend implicitement soin du nombre de lignes.
sortie:
x = np.array([[1], [5]]) print(np.dot(x, x.T))
J'aurais dû ajouter que je veux faire cela pour x de dimension arbitraire, comment puis-je remodeler le tableau de cette façon? `np.reshape (x, len (x)) me rend juste x.
@OnkelZukunft Ajout du remodelage. Veuillez trouver la modification. Merci.
Alors que vos vecteurs sont définis comme des tableaux 1-d, vous pouvez utiliser np.outer
:
x = np.array([[1], [5]]) x @ x.T > array([[ 1, 5], > [ 5, 25]])
Alternativement, vous pouvez également définir vos vecteurs comme des matrices et utiliser la multiplication matricielle normale:
np.outer(x, x.T) > array([[ 1, 5], > [ 5, 25]])
np.matmul(x[:, np.newaxis], [x])
Ce serait une meilleure réponse si vous expliquiez comment le code que vous avez fourni répond à la question.
C'est le produit intérieur, point, (comme son nom l'indique)! Avez-vous lu la documentation sur
np.dot
?