Yes, both the "base" and "target" are ascending. Thanks!
Chao On Sat, Nov 17, 2012 at 2:40 PM, Benjamin Root <[email protected]> wrote: > > > On Saturday, November 17, 2012, Chao YUE 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[0]): >> for col in range(data.shape[1]): >> for i in range(len(base)-1): >> if data[row,col]>=base[i] and data[row,col]<=base[i+1]: >> >> data[row,col]=lintrans(data[row,col],(base[i],base[i+1]),(target[i],target[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 >> filename:lineno(function) >> 18047 0.110 0.000 0.110 0.000 >> mathex.py:132(lintrans) >> 1 12.495 12.495 19.061 19.061 >> mathex.py:196(plot_array_transg) >> >> >> so is there anyway I can speed up this loop? Thanks for any suggestions!! >> >> best, >> >> Chao >> >> > If the values in base are ascending, you can use searchsorted() to find > out where values from data can be placed into base while maintaining order. > Don't know if it is faster, but it would certainly be easier to read. > > Cheers! > Ben Root > > _______________________________________________ > NumPy-Discussion mailing list > [email protected] > http://mail.scipy.org/mailman/listinfo/numpy-discussion > > -- *********************************************************************************** Chao YUE Laboratoire des Sciences du Climat et de l'Environnement (LSCE-IPSL) UMR 1572 CEA-CNRS-UVSQ Batiment 712 - Pe 119 91191 GIF Sur YVETTE Cedex Tel: (33) 01 69 08 29 02; Fax:01.69.08.77.16 ************************************************************************************
_______________________________________________ NumPy-Discussion mailing list [email protected] http://mail.scipy.org/mailman/listinfo/numpy-discussion
