Ermitteln Sie die Anzahl von 1en an derselben Position in zwei Arrays

7

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.

    
Anderson Green 18.05.2009, 10:21
quelle

7 Antworten

19

Ein etwas kürzerer und hoffentlich mehr pythonischer Weg:

%Vor%     
Drakosha 18.05.2009 10:29
quelle
2

Etwas kürzere Variante von Drakoshas:

%Vor%     
John Pirie 18.05.2009 12:15
quelle
1

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?

    
BerggreenDK 18.05.2009 10:29
quelle
1

Motiviert durch kurze Notwendigkeit, pervers zu sein, biete ich die folgende Lösung an:

%Vor%

(Drakoshas Vorschlag ist ein weit vernünftigerer Weg, um dieses Problem zu lösen. Dies zeigt nur, dass man das gleiche Problem oft auf verschiedene Arten betrachten kann.)

    
bendin 18.05.2009 10:40
quelle
0

Mit SciPy :

%Vor%     
wr. 18.05.2009 11:23
quelle
0
%Vor%

Im Grunde erstellt dies nur eine neue Liste, die alle Elemente der anderen beiden zusammengefügt hat. Sie wissen, dass es zwei Einsen gab, wenn die Summe 2 ist (nur Nullen und Einsen in der Liste vorausgesetzt). Führen Sie daher den Zählvorgang nur bei 2 aus.

    
Matt 18.05.2009 14:05
quelle
0

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.

    
Daniel Wedlund 18.05.2009 12:17
quelle

Tags und Links