Skalarprodukt von zwei Listen in Python
Schreiben brauche ich die Funktion dot( L, K ), der output das Skalarprodukt der Listen L und K. Wenn diese beiden input-Listen sind nicht von gleicher Länge, dot sollte der Ausgang 0. Wenn diese beiden Listen sind beide leer, dot sollte auch der Ausgang 0. Sie sollten davon ausgehen, dass die input-Listen beinhalten jedoch nur numerische Werte.
Dies ist, was ich habe, so weit:
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.)
Kann mir jemand helfen bitte weil ich kann nicht herausfinden, was zu tun in der letzten Zeile!
Versuchen Sie es mit einer for-Schleife für Ihre Letzte Zeile. Ich gehe davon aus, dass dies ist eine Aufgabe, sonst könnte man es verwenden
dies scheint, wie Hausaufgaben. Haben Sie einen Blick auf die
Mehr Pythonic Funktion zurückkehren würde
Sie wurden gesagt, dass Sie sollte davon ausgehen, dass die input-Listen beinhalten jedoch nur numerische Werte. Also, wo sind Sie Vergleich
numpy.dot
.dies scheint, wie Hausaufgaben. Haben Sie einen Blick auf die
zip
Funktion.Mehr Pythonic Funktion zurückkehren würde
None
auf einer Länge Diskrepanz, aber hey, ich denke du hast Sie zu schreiben, was dein Lehrer will. 🙂Sie wurden gesagt, dass Sie sollte davon ausgehen, dass die input-Listen beinhalten jedoch nur numerische Werte. Also, wo sind Sie Vergleich
L
auf den leeren string?InformationsquelleAutor Benjamin Brooks | 2015-09-19
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie dies tun, indem Sie eine Liste Verständnis:
Wenn eine der Listen leer ist, wird
zip(K, L)
zurück[]
. Dann, per definition,sum([])
geben Sie null.return sum(i*j for i,j in zip(K, L)) if len(K) == len(L) else 0
, aber vielleicht ein bisschen zu fancy für Ihre Lehrer. 🙂Ich Frage mich, was die Lehrer denken, dass der
return len(K) == len(L) and sum(starmap(mul, zip(K, L))) or 0
Gute call. Ich Frage mich, ob die Lehrerin auch weiß, dass itertools vorhanden ist... 🙂
Wollte noch hinzufügen: wenn die Längen sind nicht gleich, Sie wollen wahrscheinlich an
raise
ein Fehler, da das Skalarprodukt von zwei Vektoren verschiedener Dimensionen ist nicht definiertInformationsquelleAutor VHarisop
Liste Verständnis, da V1 und V2 zwei Vektoren(Listen):
InformationsquelleAutor abhikarma1493
Die for-Schleife ein array zurückgibt, hat jede der K*L-element multipliziert.
Dann ist die Summe-Funktion fügt jedem element und gibt das Skalarprodukt
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
Letzte Zeile sollte
return 0
. Nicht ein furchtbar wertvolles beantworten, da die früheren, soweit es beleuchtet den Algorithmus etwas klarer für diejenigen, die zu neuen, zu erkennenzip
.InformationsquelleAutor Pablo Velázquez
One-liner die arbeiten für die Träger von Freiwilligen-Größe (möchten Sie vielleicht, um zu definieren, es als eine regelmäßige und gut lesbar-Funktion oder ändern Sie den code verwenden
sum
statt ganz Linksreduce
). Es ist nicht definiert, die Multiplikation für nicht-gleiche Längen, wie es ist nicht ein Teil der standard-Skalarprodukt definition-es werden nur Fehler melden, die auf nicht-gleiche Längen:Quick-test:
wenn Sie immer noch wünschen, um die Länge prüft und die definition für non-entspricht der Multiplikation:
InformationsquelleAutor VDV