2016-06-16 12 views
-5

Ich bin nur neugierig, warum das Finden des Maximalwerts in C++ schneller ist als in Python3. Hier ist ein Ausschnitt aus meinem Code in beiden Sprachen:Maximaler Wert in Python im Vergleich zu C++

C++:

int main() { 
    int arr[] = {45, 67, 89}; 
    int temp = 0; 

    for(int n = 0; n < 3; n++) { 
     if(arr[n] > temp) 
      temp = arr[n]; 
    } 

    cout << "Biggest number: " << temp << endl; 
} 

Python:

def Main(): 
    numbers = ['87', '67', '32', '43'] 
    print(max(numbers)) 

if __name__ == "__main__": 
    Main() 

Wie es in dem Code dargestellt ist, ich bin mit dem Maximalwert in C zu finden ++ über Schleife jedes Element in einem Array im Vergleich zur Verwendung der Methode max() in Python.

Ich habe dann den Code auf dem Terminal ausgeführt, um ihre Ausführungszeiten zu finden und herausgefunden, dass es etwa 0,006s (C++) und 0,032s (Python) dauert. Gibt es eine Möglichkeit, die Ausführungszeit von Python weiter zu verkürzen?

+7

"* das Finden des Maximalwerts in C++ ist langsamer als in Python3 *" ... Das ist das Gegenteil von dem, was Ihre Daten sagen. –

+0

Sie könnten genauso gut 'std :: max_element' verwenden, um dem Python-Einstrich zu entsprechen, der keinen neu erfundenen Code enthält. – chris

+0

Haben Sie dies mit Code getestet, der mit optimierten Optimierungen kompiliert wurde? Wenn nicht, ist das bedeutungslos. Bitte geben Sie die Befehlszeile ein, mit der Sie Ihr Beispiel kompiliert haben. Wenn es Visual Studio ist, erstellen Sie bitte einen "Release" -Build, nicht einen "Debug" -Build. – PaulMcKenzie

Antwort

-1

Angenommen, Sie verwenden einen größeren Vektor als das oben abgebildete Spielzeugbeispiel, würde ich Ihnen einen Tipp geben.

# set up a vector with 50000 random elements 
a = np.random.randint(0,100000,50000) 

max_val = np.max(a) 

Sehr schnell relativ zur Schleifenbildung.

Mein Computer zeigt es etwa 12x schneller np.max als die integrierte Max() Operation in Python zu verwenden. C++ wäre noch schneller, da es sich um eine kompilierte Sprache handelt. (Numpy umschließt Low-Level-Pakete, die für C-Code optimiert sind.)

0

Python ist eine interpretierte Sprache. Python muss die Textdatei mit dem Python-Code lesen, parsen und erst dann mit der Ausführung beginnen.

Zu der Zeit, die der C++ - Code ausgeführt wird, hat der C++ - Compiler bereits das ganze schwere Heben der Kompilierung von C++ in nativen Maschinensprachcode durchgeführt, der direkt von der CPU ausgeführt wird.

Es ist möglich, Python-Code vorzukompilieren; Das spart etwas Overhead, aber der C++ - Code profitiert immer noch von der C++ - Kompilierzeit-Optimierung. Bei einer kleinen Array-Größe wird ein aggressiver C++ - Compiler die Schleife wahrscheinlich ausrollen und vielleicht sogar den Maximalwert zur Kompilierzeit anstatt zur Laufzeit berechnen; Also alles, was Sie am Ende ausführen, ist:

cout << "Biggest number: " << 89 << endl; 

Dies ist etwas, das theoretisch Python auch tun kann; Dies erfordert jedoch zur Laufzeit noch mehr CPU-Zyklen.