Ich finde die astype() - Methode von numpy Arrays nicht sehr effizient. Ich habe ein Array mit 3 Millionen Uint8 Punkt. Die Multiplikation mit einer 3x3-Matrix dauert 2 Sekunden, aber die Umwandlung des Ergebnisses von uint16 in uint8 dauert eine weitere Sekunde.numpy: Wie man einen Array-Typ schnell konvertiert
Genauer gesagt:
print time.clock()
imgarray = np.dot(imgarray, M)/255
print time.clock()
imgarray = imgarray.clip(0, 255)
print time.clock()
imgarray = imgarray.astype('B')
print time.clock()
Skalarprodukt und Skalierung dauert 2 sec
Clipping dauert 200 ms Typumwandlung 1 sec
Gegeben von den anderen Operationen unternommen, um die Zeit in Anspruch nimmt, würde ich astype
erwarten schneller sein. Gibt es eine schnellere Möglichkeit, Typumwandlung zu tun, oder liege ich falsch, wenn die Typumwandlung nicht so schwer sein sollte?
Edit: das Ziel ist es, die letzten 8 Bit-Array in eine Datei
Warum Sie uint16 und wieder zurück zu gehen brauchen? Ist es möglich, 'M' als Uint8-Matrix zu haben, dann brauchen Sie die Konvertierung nicht. – u0b34a0f6ae
Das Ergebnis des dot-Produkts wird den uint8-Bereich übersteigen. Ich habe ursprünglich eine Float-M-Matrix verwendet, und wenn ich zu Integer gehe, würde das eine Verbesserung bedeuten, aber das stimmt nicht. – shodanex
Es dauert wahrscheinlich die ganze Zeit, auf alle Speicherplätze zuzugreifen. Klingt schwer zu reparieren. –