# how to make this code faster

Juho Schultz juho.schultz at helsinki.fi
Thu Oct 13 08:43:48 CEST 2005

```ajikoe at gmail.com wrote:
> def f(x,y):
>     return math.sin(x*y) + 8 * x
> I have code like this:
>
> def main():
>     n = 2000
>     a = zeros((n,n), Float)
>     xcoor = arange(0,1,1/float(n))
>     ycoor = arange(0,1,1/float(n))
>
>
>     for i in range(n):
>         for j in range(n):
>             a[i,j] = f(xcoor[i], ycoor[j])  # f(x,y) = sin(x*y) + 8*x
>
>     print a[1000,1000]
>     pass
>
> if __name__ == '__main__':
>     main()
>
>
> I try to make this run faster even using psyco, but I found this still
> slow, I tried using java and found it around 8x faster...
>

I guess the double loop (4E6 rounds) makes your program so slow.

I assume you are using numarray or numeric for this.
The built-in array operations are a lot faster.
Try using them instead. And function calls are not free either.
Xcoor and ycoor are equal, so there is no need to generate them both.

I guess the following would be a lot faster:

def func():
n = 2000
a = numarray.zeros((n,n), "Float")
coor = numarray.arange(0,1,1/float(n))

for i in range(n):
a[:,i] = numarray.sin(coor*coor[i]) + 8*coor

print a[1000,1000]
pass

```