I find the astype() method of numpy arrays not very efficient. I have an array containing 3 million of Uint8 point. Multiplying it by a 3x3 matrix takes 2 second, but converting the result from uint16 to uint8 takes another second.
More precisely :
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()
dot product and scaling takes 2 sec
clipping takes 200 msec
type conversion takes 1 sec
Given the time taken by the other operations, I would expect astype
to be faster.
Is there a faster way to do type conversion, or am I wrong when guesstimating that type conversion should not be that hard ?
Edit : the goal is to save the final 8 bit array to a file