2017-07-04 3 views
-6
def inner_product(v, w) : 
    for v, w in range(len(v*w)) : 


print(inner_product([1, 2, 3, 4], [5, 6, 7, 8])) 

Je veux multiplier les vecteurs v et w. J'ai fait ma fonction en tant que inner_product (v, w) Cependant, la phrase ne fonctionne pas. Que devrais-je faire? La réponse doit être 70Multiplier deux listes de vecteurs en utilisant self-function

J'ai cherché 2 derniers jours mais je n'ai pas trouvé la bonne manière.

+0

+ Je dois utiliser pour, range(), len() Et le message d'erreur est que "print (inner_product ([1, 2, 3, 4], [5, 6, 7, 8])) ^ IndentationError: attendu un bloc en retrait " –

+1

votre fonction est incomplète. Votre boucle ne fait rien (sauf probablement lancer une erreur de syntaxe). Aussi, je doute que 'len (v * w)' soit ce que vous voulez. De ma compréhension du problème, vous voulez probablement 'len (v)' (ou de manière équivalente, 'len (w)') – Zinki

+0

5 secondes sur google: http://www.pradeepadiga.me/blog/2017/04/18/ find-dot-product-in-python-sans-utilisation-numpy/ –

Répondre

0

Vous pouvez le faire comme ceci:

def inner_product(v,w): 
    l = len(v) 
    mul = 0 
    for i in range(l): 
     mul += v[i] * w[i] 
    return mul 
+0

votez si cela vous aide !! –

+0

Je vous remercie pour votre aimable réponse, mais je dois utiliser la forme 'for_ in range (len (_)' à la deuxième phrase et les fonctions 'range' et 'len' doivent être incluses dans la phrase 'for' –

2

Vous avez essentiellement 2 options:

  1. Réinventer la roue:

    def inner_product(v, w) : 
        return sum(num_v * num_w for num_v, num_w in zip(v, w)) 
    
    print(inner_product([1, 2, 3, 4], [5, 6, 7, 8])) 
    # 70 
    
  2. Utilisez numpy (beaucoup plus rapide avec un grand listes):

    import numpy as np 
    
    def inner_product(v, w) : 
        return v.dot(w) 
    
    print(inner_product(np.array([1, 2, 3, 4]), np.array([5, 6, 7, 8]))) 
    # 70 
    

Dans le cas où les deux listes ne sont pas de la même longueur, la première méthode multipliera fonction de la longueur de la liste courte (c.-à-[1, 2, 3, 4, 9] et [5, 6, 7, 8] sera également une sortie 70). Avec la seconde méthode, numpy soulèvera un ValueError.

+0

Merci pour votre réponse, mais je dois utiliser la forme 'for_ in range (len (_)' à la deuxième phrase et les fonctions 'range' et 'len' doivent être incluses dans la phrase 'for' –

+0

" Je dois ... "comme dicté par qui? – DeepSpace

0

Vous étiez proche .. J'utiliserais la fonction zip afin d'itérer deux listes simultanément et de multiplier les éléments, pour finalement retourner les résultats de toutes les multiplications.

def inner_product(v, w) : 
    mul = 0 
    for first, second in zip(v,w) : 
    mul += first * second 
    return mul 

print(inner_product([1, 2, 3, 4], [5, 6, 7, 8])) 

Une autre façon utilise la bibliothèque numpy, vous pouvez multiplier deux listes et que la somme le résultat de la liste des multiplications:

import numpy as np 

a = np.array([1,2,3,4]) 
b = np.array([5, 6, 7, 8]) 

print(sum(a * b)) 

EDIT:

Eh bien, après votre commentaire , en utilisant range(len) voici un anti modèle:

def inner_product(v, w) : 
    mul = 0 
    for i in range(len(v)): 
    mul += v[i] * w[i] 
    return mul 

print(inner_product([1, 2, 3, 4], [5, 6, 7, 8])) 
+0

Merci pour la réponse aimable Cependant, je dois utiliser la forme 'for_ in range (len (_)' à la deuxième phrase.Et pour les fonctions 'range' et 'len' doivent être incluses dans la phrase 'for' –

+0

@ 곽성호, j'ai ajouté une section EDIT à ma réponse. Considérez que c'est un anti-pattern qui l'utilise comme ça. –

+0

Merci beaucoup! C'est vraiment utile! Je me demande la moyenne de 'mul = 0' et 'mul + = v [i] * w [i]' ,. Et quelle fonction at-il 'len (v)' à la phrase trois? Pourquoi n'est-ce pas 'range (len (v, w))'? –