web-dev-qa-db-fra.com

Comment multiplier deux vecteurs et obtenir une matrice?

En fonctionnement numpy, j'ai deux vecteurs, disons que le vecteur A est 4X1, le vecteur B est 1X5, si je fais AXB, il devrait en résulter une matrice de taille 4X5.

Mais j'ai essayé de nombreuses fois, faisant de nombreux types de remodelage et de transposition, ils soulèvent tous une erreur disant non aligné ou retournent une seule valeur.

Comment dois-je obtenir le produit de sortie de la matrice que je veux?

24
Larry

La multiplication matricielle normale fonctionne tant que les vecteurs ont la bonne forme. N'oubliez pas que * Dans Numpy est multiplication par élément, et la multiplication matricielle est disponible avec numpy.dot() (ou avec l'opérateur @, Dans Python 3,5)

>>> numpy.dot(numpy.array([[1], [2]]), numpy.array([[3, 4]]))
array([[3, 4],
       [6, 8]])

C'est ce qu'on appelle un "produit extérieur". Vous pouvez l'obtenir en utilisant des vecteurs simples en utilisant numpy.outer():

>>> numpy.outer(numpy.array([1, 2]), numpy.array([3, 4]))
array([[3, 4],
       [6, 8]])
25
Dietrich Epp

La fonction matmul (depuis numpy 1.10.1) fonctionne très bien:

import numpy as np

a = np.array([[1],[2],[3],[4]])
b = np.array([[1,1,1,1,1],])

ab = np.matmul(a, b)
print (ab)
print(ab.shape)

Vous devez déclarer vos vecteurs correctement. Le premier doit être une liste de listes d'un numéro (ce vecteur doit avoir des colonnes sur une ligne), et le second - une liste de liste (ce vecteur doit avoir des lignes dans une colonne) comme dans l'exemple ci-dessus.

Production:

[[1 1 1 1 1]
 [2 2 2 2 2]
 [3 3 3 3 3]
 [4 4 4 4 4]]

(4, 5)
2
Serenity

Si vous utilisez numpy.

Tout d'abord, assurez-vous d'avoir deux vecteurs. Par exemple, vec1.shape = (10, ) et vec2.shape = (26, ); en numpy, le vecteur ligne et le vecteur colonne sont la même chose.

Deuxièmement, vous faites res_matrix = vec1.reshape(10, 1) @ vec2.reshape(1, 26) ;.

Enfin, vous devriez avoir: res_matrix.shape = (10, 26).

la documentation de numpy indique qu'elle rendra obsolète np.matrix(), il vaut donc mieux ne pas l'utiliser.

0
max yi