[PYTHON] Über alles von numpy

Über alles von numpy

Bitte beziehen Sie sich auf den neuen Artikel in ** hier ** unter Bezugnahme auf den Kommentar von @ shiracamus.

Einführung

numpy's all ist eine Funktion, die True zurückgibt, wenn alle Elemente des numpy-Arrays True sind, andernfalls False. Die Dokumentation finden Sie hier (https://docs.scipy.org/doc/numpy/reference). /generated/numpy.ndarray.all.html#numpy.ndarray.all).

Die Berechnung mit Numpy ist sehr schnell, daher ist es im Grunde schneller, mit Numpy zu rechnen, als sie direkt mit Python zu schreiben, aber ich wollte diesen Teil wirklich beschleunigen und habe verschiedene Dinge ausprobiert, begrenzte Bedingungen Wenn ja, konnte ich es umkippen, also möchte ich es vorstellen.

Methode

Die Methode besteht darin, mit der for-Anweisung auf alle Array-Elemente zuzugreifen und in der Reihenfolge mit und zu berechnen. Vergleichen Sie dies mit all von numpy. Ich würde auch gerne die Zeit herausfinden, wenn ich numba benutze.

Quellcode

import numpy as np
import time
import matplotlib.pyplot as plt
import sys

#Nutze alles
def func1(arr):
    return arr.all()

#Verwenden Sie und mit für
def func2(arr):
    tf = True
    for i in range(arr.size):
        tf = tf and arr[i]
    else:
        return tf

if __name__ == '__main__':
    if len(sys.argv) == 3:
        testsize, arr_size = map(int, sys.argv[1:])
    else:
        testsize = 10
        arr_size = 10
    #Anzahl der Tests,Arraygröße
    print(testsize, arr_size)

    elapsed_time = []
    for i in range(testsize):
        #Richtig und falsch Array
        arr = np.random.randint(2, size=arr_size).astype(np.bool)
        start = time.time()

        func1(arr)

        end = time.time()
        elapsed_time.append((end - start) * 1e6)

    plt.plot(elapsed_time[1:], 'b', label='numpy all')

    elapsed_time = []
    for i in range(testsize):
        arr = np.random.randint(2, size=arr_size).astype(np.bool)
        start = time.time()

        func2(arr)

        end = time.time()
        elapsed_time.append((end - start) * 1e6)

    plt.plot(elapsed_time[1:], 'r', label='for')
    plt.xlabel('test size')
    plt.ylabel('elapsed time[us]')
    plt.legend()
    plt.show()

Ergebnis

numba nicht verwendet

Angenommen, die Größe des Arrays beträgt 10 und die Anzahl der Tests beträgt das 10-fache. Das Ergebnis ist in der folgenden Abbildung dargestellt. Die for-Anweisung ist schneller durchzuführen und zu verwenden. fig10_10.png

Angenommen, die Größe des Arrays beträgt 200 und die Anzahl der Tests beträgt 10. Das Ergebnis ist in der folgenden Abbildung dargestellt. Alles ist schneller. fig10_200.png

Die for-Anweisung wird langsamer, wenn das Array vergrößert wird. Sie können in der folgenden Abbildung sehen, wie es aussieht. Es ist nicht bekannt, wie dieses impulsartige Erscheinungsbild aussieht. Von hier aus denke ich, dass es von der Umgebung abhängt, aber wenn die Größe des Arrays 100 oder weniger beträgt, wird es so geschrieben, wie es in Python ist Es stellte sich heraus, schneller zu sein. fig_.png

Verwenden Sie numba

Da numba Just In Time (JIT) kompiliert, dauert der Zugriff auf die Funktion am Anfang sehr lange, sodass bis auf die verstrichene Zeit für den ersten Zugriff ein Plot erstellt wird. Ich habe das Ergebnis erhalten. Es scheint, dass der zweite Zugriff auch Zeit braucht. Man kann sagen, dass es keinen Unterschied in der Ausführungszeit gibt. fig.png Wenn das Array größer ist, sieht es wie folgt aus: numpy ist schneller. fig__.png

Fazit

Ich habe viele Grafiken eingefügt, möchte aber die folgenden zwei Dinge sagen.

Schließlich

Was war der Puls, der in dieser Grafik erschien?

Recommended Posts

Über alles von numpy
Über alle von numpy (2.)
Über Numpy
Über Numpy Broadcast
Über die Zuweisung von numpy.ndarray
Über Variable von Chainer
Über __all__ in Python
Informationen zur kumulativen Zuordnung von Liste und Numpy-Array
Funktion von NumPy einstellen
Über Importfehler von numpy und scipy in anaconda
Summe mehrerer Numpy-Arrays (Summe)
Über den japanischen Weg von Pyminizip
Über die japanische Unterstützung von Cometchat
Über verschiedene Codierungen von Python 3
Über die Kostenberechnung von MeCab
Über den ungefähren Bruchteil des Umfangsverhältnisses
Über die Komponenten von Luigi
Über die HOG-Ausgabe von Scikit-Image
Über die Funktionen von Python
Über die Datenverwaltung von Amboss-App-Server
Über Numpy Array und Asarray
Visualisierung der von numpy erstellten Matrix
Schreiben Sie NumPy stückweise für CuPy um
Über den Rückgabewert von pthread_mutex_init ()
Über den Rückgabewert des Histogramms.
Über den Grundtyp von Go
[Memo] Kleine Geschichte von Pandas, numpy
Über die Obergrenze von Threads-max
Über die zirkuläre Überkreuzung genetischer Algorithmen
Über das Verhalten von Yield_per von SqlAlchemy
Informationen zum Importfehler von PyQt5.QtWidgets (Anaconda)
Über die Größe der Punkte in Matplotlib
Über die Farbhalbtonverarbeitung von Bildern
Informationen zur Grundlagenliste der Python-Grundlagen
Informationen zum Erstellen einer GUI mit TKinter of Python
Informationen zum Verhalten von enable_backprop von Chainer v2
Informationen zur virtuellen Umgebung von Python Version 3.7
Über sensor_mode und Blickwinkel der Picamera
Memorandum von Python-Anfängern
Memorandum zu Djangos QueryDict
Zusammenfassung der Numpy-Funktionen, die ich nicht kannte
Über die Argumente der Setup-Funktion von PyCaret
Holen Sie sich alle Live-Tweets von professionellen Baseball
Über japanische Schriften von matplotlib (für Mac)
Über die Normalgleichung der linearen Regression
Lesen Sie den gesamten Inhalt von proc / [pid]
Hinweis auf Probleme hinsichtlich der Koexistenz des Python 2/3-Systems
[Python] Kapitel 02-04 Grundlagen des Python-Programms (Informationen zu Kommentaren)
Random.choice Gewichtung auch unter numpy v1.6