El método astype() de matrices numpy no es muy eficiente. Tengo una matriz que contiene 3 millones de puntos Uint8. Multiplicarlo por una matriz de 3x3 toma 2 segundos, pero convertir el resultado de uint16 a uint8 toma otro segundo.numpy: Cómo convertir un tipo de matriz rápidamente
Más precisamente:
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()
producto escalar y la escala se lleva a 2 seg
recorte toma 200 mseg conversión de tipo toma 1 sec
Dado el tiempo empleado por las otras operaciones, esperaría astype
para ser mas rapido ¿Existe alguna manera más rápida de realizar la conversión de tipo, o estoy equivocado al estimar que la conversión de ese tipo no debería ser tan difícil?
Editar: el objetivo es salvar a la matriz final de 8 bits en un archivo
¿Por qué necesita para ir a uint16 y viceversa? ¿Es posible tener 'M' como una matriz uint8, entonces no necesita la conversión. – u0b34a0f6ae
el resultado del producto escalará el rango uint8. Originalmente estaba usando una matriz flotante M, y pensé que ir al número entero me daría alguna mejora, pero esto no es cierto. – shodanex
Lo que toma todo ese tiempo, probablemente, es acceder a todas las ubicaciones de memoria. Suena difícil de arreglar –