Ich implementierte ein Gewichtungssystem namens TF-IDF auf einer Menge von 42000 Bildern, die jeweils aus 784 Pixeln bestanden. Dies ist im Grunde eine 42000 mal 784 Matrix. Die erste Methode, die ich versuchte, verwendete explizite Schleifen und nahm mehr als 2 Stunden.Erläutern Sie den Geschwindigkeitsunterschied zwischen der vektorisierten Funktionsanwendung von numpy VS pythons for-Schleife
def tfidf(color,img_pix,img_total):
if img_pix==0:
return 0
else:
return color * np.log(img_total/img_pix)
...
result = np.array([])
for img_vec in data_matrix:
double_vec = zip(img_vec,img_pix_vec)
result_row = np.array([tfidf(x[0],x[1],img_total) for x in double_vec])
try:
result = np.vstack((result,result_row))
# first row will throw a ValueError since vstack accepts rows of same len
except ValueError:
result = result_row
Die zweite Methode, die ich verwendet numpy Matrizen versucht und dauerte weniger als 5 Minuten. Beachten Sie, dass data_matrix, img_pix_mat beide 42000 mal 784 Matrizen sind, während img_total ein Skalar ist.
result = data_matrix * np.log(np.divide(img_total,img_pix_mat))
Ich hatte gehofft, jemand könnte den immensen Unterschied in der Geschwindigkeit erklären.
Die Autoren der folgenden Arbeit mit dem Titel "The NumPy Array: eine Struktur für effiziente numerische Berechnung" (http://arxiv.org/pdf/1102.1523.pdf), auf der Oberseite der Seite 4, dass sie eine 500-fache Geschwindigkeitserhöhung aufgrund der vektorisierten Berechnung beobachten. Ich nehme an, dass ein Großteil der Geschwindigkeitszunahme, die ich sehe, darauf zurückzuführen ist. Ich möchte jedoch noch einen Schritt weiter gehen und fragen, warum numpy vektorisierte Berechnungen so viel schneller sind als Standard-Python-Schleifen?
Vielleicht kennen Sie vielleicht auch andere Gründe, warum die erste Methode langsam ist. Haben Versuch/Ausnahme Strukturen einen hohen Aufwand? Oder dauert die Bildung eines neuen np.array für jede Schleife eine lange Zeit?
Danke.
Dies verdeutlicht die Gründe, warum numpy Verwendung von C ist viel schneller: http: // stackoverflow.com/q usesions/8385602/warum-sind-numpy-arrays-so-schnell. –