Hier ist eine interessante Beobachtung:ndarry in numpy: teuer in ndarray Iteration
1 import numpy as np
2 data = np.array([[255,255,255], [0, 0, 255], [255, 0, 0]], np.int8)
3 for i in range(1000000):
4 for row in data:
5 for col in row:
6 flag = col > 0
Der obige Code nimmt ~ 17 Sekunden zu beenden. Wenn ich tun
data = data.tolist()
Dann wird die ganze Sache nur data
zur Liste konvertieren nimmt < 1 Sekunde zu beenden.
Möchten Sie wissen: 1. Was ist der Grund für die niedrige Effizienz im Vergleich von NDarray-Werten? 2. Was ist eine geeignetere Methode, um den Vergleich durchzuführen, wenn ich das NDarray nicht in eine Liste umwandle? Wäre es effizienter, als wenn ich es in eine Liste umwandeln würde?
Vielen Dank!
-------------- bearbeitet Frage: -------------
Wie @hpaulj wies darauf hin, es ist die Iteration nicht Wertvergleich, das ist sehr teuer. Aber ich muss durch das Array iterieren. Gibt es einen besseren Weg, als ihn in eine Liste zu konvertieren?
Es ist nicht der Wertvergleich, der teuer ist, es ist die Iteration. Sie sollten den Vergleich auf das gesamte Array anwenden. – hpaulj
Ich habe einen Fehler gefunden: Der Typ np.int8 kann 255 nicht speichern. Es ist ein signierter Typ, der nur -128 ~ 127 speichern kann. Also sind Ihre Daten 'np.array ([[- 1, -1, -1], [0, 0, -1], [-1, 0, 0]], np.int8). – gzc
@hpaulj Ya. Einverstanden. Nur gedacht. Aber ich muss das ganze ndarray iterieren. Irgendein besserer Weg? – cheng