[Edu-sig] Introducing Python to Engineering Students
Rob Malouf
rmalouf at mail.sdsu.edu
Wed Mar 12 03:24:04 CET 2008
On Mar 11, 2008, at 5:11 PM, David MacQuigg wrote:
> It would make a nice improvement in this Mandelbrot demo if you
> could show me a way to significantly improve the speed of the Python
> I already have, perhaps avoiding the need for C.
Actually, I don't see a clean way to vectorize that inner loop, so
maybe numpy isn't a good fit here. Which means weave is.
First, running the program as-is, I get:
1a) Python speed = 776 points/sec
1b) C speed = 103200 points/sec
2a) Python speed = 833 points/sec
2b) C speed = 108600 points/sec
With this added to the beginning of the program to load and invoke
psyco:
import psyco
psyco.full()
I get:
1a) Python speed = 2700 points/sec
1b) C speed = 101600 points/sec
2a) Python speed = 2800 points/sec
2b) C speed = 110100 points/sec
Or, instead, replacing your getpts with the weave-d version:
from numpy import zeros
from scipy import weave
...
vals = zeros(100,int)
code = r"""
double cx = cx0 - dx;
for (int p=0; p<100; p++) {
double zx = 0.0;
double zy = 0.0;
int i;
cx += dx;
for (i=0; i<999; i++) {
double zx2 = zx*zx;
double zy2 = zy*zy;
if ((zx2 + zy2) > 4.0) break;
zy = 2*zx*zy + cy0;
zx = zx2 - zy2 + cx;
}
vals[p] = i;
}
"""
weave.inline(code,['cx0','cy0','dx','vals'])
I get:
1a) Python speed = 102200 points/sec
1b) C speed = 103300 points/sec
2a) Python speed = 108400 points/sec
2b) C speed = 110700 points/sec
Not bad! There's probably a more pythonic way to write that, but
this'll do. And after all, this is a realistic situation: you've got
the inner loop of a program written in C, but you'd rather write all
the supporting code around it in something like Python. And note that
weave automatically compiles and links (if necessary) and then loads
the C part when you run mandel.py. You (or your students) don't need
to remember where the python headers are or how to build a shared
library on whatever platform they're using.
---
Rob Malouf <rmalouf at mail.sdsu.edu>
Department of Linguistics and Asian/Middle Eastern Languages
San Diego State University
More information about the Edu-sig
mailing list