Bitte beziehen Sie sich auf den neuen Artikel in ** hier ** unter Bezugnahme auf den Kommentar von @ shiracamus.
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.
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.
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()
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.
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.
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.
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. Wenn das Array größer ist, sieht es wie folgt aus: numpy ist schneller.
Ich habe viele Grafiken eingefügt, möchte aber die folgenden zwei Dinge sagen.
Was war der Puls, der in dieser Grafik erschien?
Recommended Posts