Ich habe zwei Listen:
%Vor%Ich möchte die Anzahl von 1en an der gleichen Position in beiden Listen finden.
Die Antwort für diese Arrays wäre 2.
Ich bin kein Experte für Python, aber was stimmt nicht mit einer einfachen Schleife vom Anfang bis zum Ende des ersten Arrays?
In C # würde ich etwas tun wie:
%Vor%Wäre das in Ihrer Sprache möglich?
Hier kommt eine andere Methode, die die Tatsache ausnutzt, dass das Array nur Nullen und Einsen enthält.
Das Skalarprodukt zweier Vektoren x und y ist sum (x (i) * y (i)). Die einzige Situation, die ein Ergebnis ungleich null ergibt, ist, wenn x (i) == y (i) == 1 beispielsweise numpy
%Vor%einfach und nett. Diese Methode führt n Multiplikationen durch und fügt n-1 Mal hinzu, es gibt jedoch schnelle Implementierungen mit SSE, GPGPU, Vektorisierung, (fügen Sie hier Ihr schickes Wort hinzu) für Skalarprodukte (Skalarprodukte)
Ich habe die numpy-Methode für diese Methode zeitlich abgestimmt:
%Vor%und festgestellt, dass für 1000000 Schleifen die numpy-Version es in 2121ms und die zip-Methode hat es in 9502ms getan, so dass die numpy-Version ist viel schneller
Ich habe eine bessere Analyse der Efektivität gemacht und das gefunden Für n Elemente im Array dauerte die zip-Methode t1 ms und das Skalarprodukt benötigte t2 ms für eine Iteration
%Vor%Aus diesen Daten könnte man die Schlussfolgerung ziehen, dass, wenn die Anzahl der Elemente im Array (im Mittel) mehr als 350 (oder sagen wir 1000) betragen sollte, stattdessen die dot-product-Methode in Betracht gezogen werden sollte.