0
votes

Comment calculer x * x.T en python

Je souhaite calculer ce qui suit:

 x * xT

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!


1 commentaires

C'est le produit intérieur, point, (comme son nom l'indique)! Avez-vous lu la documentation sur np.dot ?


3 Réponses :


2
votes

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))


2 commentaires

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.



4
votes

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]])


0 commentaires

0
votes
np.matmul(x[:, np.newaxis], [x])

1 commentaires

Ce serait une meilleure réponse si vous expliquiez comment le code que vous avez fourni répond à la question.