Produit scalaire de deux listes en Python
J'ai besoin d'écrire la fonction point( L, K ) qui devrait sortir le produit scalaire de la liste L et K. Si ces deux listes ne sont pas d'égale longueur, la dot doit de sortie de 0. Si ces deux listes sont tous les deux vides, dot devrait également sortie 0. Vous devez supposer que l'entrée listes contiennent uniquement des valeurs numériques.
C'est ce que j'ai à ce jour:
def dot( L, K ):
if len[L]!=len[K]:
return 0
elif L == '' or L == []:
return 0
else:
return sum(L[0]*K[0], L[1]*K[1], ect.)
Quelqu'un peut m'aider svp parce que je ne peux pas comprendre ce qu'il faut faire dans la dernière ligne!
Essayez d'utiliser une boucle for pour votre dernière ligne. Je suis en supposant que c'est une mission, sinon vous pouvez utiliser
ce qui semble comme des devoirs. Jetez un oeil à la
Plus Pythonic fonction serait de retour
On vous a dit que vous doit supposer que l'entrée listes contiennent uniquement des valeurs numériques. Alors, où êtes-vous comparer les
numpy.dot
.ce qui semble comme des devoirs. Jetez un oeil à la
zip
fonction.Plus Pythonic fonction serait de retour
None
sur une longueur de décalage, mais bon, je suppose que vous avez à écrire ce que le professeur veut. 🙂On vous a dit que vous doit supposer que l'entrée listes contiennent uniquement des valeurs numériques. Alors, où êtes-vous comparer les
L
à la chaîne vide?OriginalL'auteur Benjamin Brooks | 2015-09-19
Vous devez vous connecter pour publier un commentaire.
Vous pouvez le faire à l'aide d'une compréhension de liste:
Si la liste est vide,
zip(K, L)
sera de retour[]
. Alors, par définition,sum([])
vous donnera zéro.return sum(i*j for i,j in zip(K, L)) if len(K) == len(L) else 0
, mais que peut-être un peu trop de fantaisie pour votre professeur. 🙂Je me demande ce que l'enseignant pense
return len(K) == len(L) and sum(starmap(mul, zip(K, L))) or 0
Bon appel. Je me demande si l'enseignant sait même que itertools existe... 🙂
Voulais ajouter: si les longueurs ne sont pas égaux vous souhaiterez probablement à
raise
une erreur comme le produit scalaire de deux vecteurs de différentes dimensions, n'est pas définiOriginalL'auteur VHarisop
L'aide de la liste de compréhension, compte tenu de V1 et V2 sont deux vecteurs(listes):
OriginalL'auteur abhikarma1493
La boucle for () retourne un tableau qui a chaque K*L élément multiplié.
Alors la fonction somme additionne chaque élément et renvoie le produit scalaire
def dot(K,L):
if len(K)==len(L) and len(K)!=0:
return sum([K[n]*L[n] for n in range(len(K))])
else:
return 0
Dernière ligne devrait être
return 0
. Pas très précieuse réponse, compte tenu de la précédente, sauf dans la mesure où il éclaire l'algorithme un peu plus clair pour ceux qui sont trop nouveau pour reconnaîtrezip
.OriginalL'auteur Pablo Velázquez
Un liner, qui travaille pour les vecteurs de volontaire taille (vous pouvez le définir comme un plus régulière et lisible de la fonction ou de modifier le code pour utiliser
sum
au lieu de gauchereduce
). Il ne définit pas de multiplication pour les non-égalité de longueurs, comme il ne fait pas partie de la norme dot de la définition du produit --il sera simplement signaler une erreur sur la non-égalité de longueurs:Test rapide:
si vous souhaitez intégrer la longueur des contrôles et de la définition de la non-est égal à la multiplication:
OriginalL'auteur VDV