# [Numpy-discussion] the fast way to loop over ndarray elements?

Chao YUE chaoyuejoy@gmail....
Sat Nov 17 07:28:43 CST 2012

```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

--
***********************************************************************************
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
************************************************************************************
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.scipy.org/pipermail/numpy-discussion/attachments/20121117/67a7c325/attachment.html
```