Uważam, że metoda astype() z numpy tablic nie jest zbyt wydajna. Mam tablicę zawierającą 1 milion punktów Uint8. Mnożenie go przez matrycę 3x3 zajmuje 2 sekundy, ale konwersja wyniku z uint16 na uint8 trwa jeszcze jedną sekundę.numpy: Jak szybko przekonwertować typ tablicy
Dokładniej:
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()
kropka produkt i skalowanie trwa 2 sek
strzyżenie trwa 200 ms typ konwersji trwa 1 sek
Biorąc pod uwagę czas potrzebny przez innych operacji, ja spodziewałbym astype
być szybszym. Czy istnieje szybszy sposób na konwersję typu, czy też się mylę, gdy przeliczanie wartości tego typu nie powinno być tak trudne?
Edit: celem jest, aby zapisać ostateczną 8 bitową tablicę do pliku
Dlaczego trzeba iść do uint16 iz powrotem? Czy możliwe jest posiadanie 'M' jako matrycy uint8, wtedy nie potrzebujesz konwersji. – u0b34a0f6ae
wynik produktu kropki przekroczy zakres uint8. Pierwotnie używałem macierzy float M, a myślenie o liczbie całkowitej dałoby mi trochę poprawy, ale to nie jest prawda. – shodanex
Prawdopodobnie trwa cały ten czas, ma dostęp do wszystkich lokalizacji pamięci. Trudno to naprawić. –