Python 3: Multiplier un vecteur par une matrice sans NumPy
Je suis assez nouveau à Python et à essayer de créer une fonction pour multiplier un vecteur par une matrice (de taille de colonne).
par exemple:
multiply([1,0,0,1,0,0], [[0,1],[1,1],[1,0],[1,0],[1,1],[0,1]])
[1, 1]
Voici mon code:
def multiply(v, G):
result = []
total = 0
for i in range(len(G)):
r = G[i]
for j in range(len(v)):
total += r[j] * v[j]
result.append(total)
return result
Le problème est que lorsque je tente de sélectionner la première ligne de chaque colonne de la matrice (r[j]) l'erreur "list index out of range" est affiché. Est-il un autre moyen de remplir la multiplication sans utiliser NumPy?
Vous devez vous connecter pour publier un commentaire.
La Numpythonic approche: (à l'aide de
numpy.dot
afin d'obtenir le produit scalaire de deux matrices)La Pythonic approche:
La longueur de votre deuxième
for
boucle estlen(v)
et que vous essayez d'indexationv
basés sur que si vous avez l'indice d'Erreur . En tant que plus pythonic façon, vous pouvez utiliserzip
fonction permettant d'obtenir le nombre de colonnes d'une liste, puis utilisezstarmap
etmul
à l'intérieur d'une compréhension de liste:Je pense que le problème avec ton code, c'est que vous boucle sur les lignes de la matrice plutôt que par les colonnes. Aussi, vous n'avez pas réinitialiser votre "total" de la variable après chaque vecteur*colonnes de la matrice de calcul. C'est ce que vous voulez:
r
est un élément deG
donc, c'est une ligne qui n'a que deux éléments. Cela signifie que vous ne pouvez pas utiliser les indexj
pour obtenir une valeur der
parce quej
va de 0 jusqu'à la longueur dev
, qui est de 6 dans votre exemple.J'avais besoin d'une solution où la première matrice pourrait être en 2 dimensions. L'extension de la solution de @Kasramvd à accepter un deux dimensions
first
de la matrice. Posté ici pour référence:j'ai joint un code pour la multiplication de matrice de faire suivre l'exemple de format pour une dimension de multiplication (listes de liste)
résultat est [[5]]