[Numpy-discussion] the fast way to loop over ndarray elements?
Thouis (Ray) Jones
Mon Nov 19 08:08:38 CST 2012
On Sat, Nov 17, 2012 at 8:28 AM, Chao YUE <email@example.com> wrote:
> Dear all,
> I need to make a linear contrast of the 2D numpy array "data" from an
> interval to another, the approach is:
> I have another two list: "base" & "target", then I check for each ndarray
> element "data[i,j]",
> if base[m] =< data[i,j] <= base[m+1], then it will be linearly converted
> to be in the interval of (target[m], target[m+1]),
> using another function called "lintrans".
> #The way I do is to loop each row and column of the 2D array, and finally
> loop the intervals constituted by base list:
> for row in range(data.shape):
> for col in range(data.shape):
> for i in range(len(base)-1):
> if data[row,col]>=base[i] and data[row,col]<=base[i+1]:
> break #use break to jump out of loop as the data have to be
> ONLY transferred ONCE.
> Now the profiling result shows that most of the time has been used in this
> loop over the array ("plot_array_transg"),
> and less time in calling the linear transformation fuction "lintrans":
> ncalls tottime percall cumtime percall
> 18047 0.110 0.000 0.110 0.000
> 1 12.495 12.495 19.061 19.061
> so is there anyway I can speed up this loop? Thanks for any suggestions!!
If lintrans() is a linear interpolation, could you use interp?
More information about the NumPy-Discussion