Speed of Python

Roberto Bonvallet rbonvall at gmail.com
Fri Sep 7 13:55:57 EDT 2007


On Sep 7, 1:37 pm, "wang frank" <f... at hotmail.co.jp> wrote:
> Hi,
> Here is the matlab code:
> function [z]=bench1(n)
> for i=1:n,
>     for j=1:1000,
>         z=log(j);
>         z1=log(j+1);
>         z2=log(j+2);
>         z3=log(j+3);
>         z4=log(j+4);
>         z5=log(j+5);
>         z6=log(j+6);
>         z7=log(j+7);
>         z8=log(j+8);
>         z9=log(j+9);
>     end
> end
> z = z9;
>
> I am not familiar with python, so I just simply try to reproduce the same
> code in python.
> If you think that my python script is not efficient, could you tell me how
> to make it more efficient?

> > > import math
> > > def bench1(n):
> > >         for i in range(n):
> > >                 for j in range(1000):

The range(1000) call creates a list of 1000 elements each time it is
called.
This is expensive.  You could try something like the following:

def bench1a(n):
    r = range(1000)
    for i in range(n):
        # reuse the list
        for j in r:
            ...

def bench1b(n):
    for i in range(n):
        # don't use a list at all
        j = 0
        while j < 1000:
            ...

I'm no expert on Python optimization either, so I cannot guarantee
that both are
the best way to write this algorithm.

> > > [...]
> > >                         m=j+1

This step also doesn't occur in the Matlab code.

Hope this helps, although maybe I'm not the right person to talk about
optimization, and I haven't measured my code.

--
Roberto Bonvallet





More information about the Python-list mailing list