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

David Warde-Farley d.warde.farley at gmail.com
Sun Nov 18 17:10:17 EST 2012

```This looks like a prime candidate for using Cython:

http://docs.cython.org/src/userguide/numpy_tutorial.html

On Sat, Nov 17, 2012 at 8:28 AM, Chao YUE <chaoyuejoy at gmail.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[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
>
> ************************************************************************************
>
>
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion at scipy.org
> http://mail.scipy.org/mailman/listinfo/numpy-discussion
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20121118/8837c04a/attachment.html>
```