I need to loop through each pixel of a 2560x2160 2D numpy array (image). A simplified version of my problem is as follows:
import time
import numpy as np
t = time.clock()
limit = 9000
for (x,y), pixel in np.ndenumerate(image):
if( pixel > limit )
pass
tt = time.clock()
print tt-t
This is taking an obnoxious ~30 seconds to complete on my computer. ( Core i7, 8GB ram ) Is there a faster way to perform this loop with an interior 'if' statement? I am only interested in pixels above a certain limit, but I do need their (x,y) indices and value.
Use a boolean matrix:
First, try to use vectorize calculation:
If your problem can't be solve by vectorize calculation, you can speedup the for loop as:
or:
The numpy.ndenumerate is slow, by using normal for loop and get the value from array by
item
method you can speedup the loop by 4x.If you need more speed, try to use Cython, it will make your code as fast as C code.