Slow Python - what can be done?
Skip Montanaro
skip at pobox.com
Thu Mar 18 13:09:42 EST 2004
Jason> Here's the code: what should I do to speed things up?
Without considering your code, two suggestions come to mind. One, look at
PIL or Numeric. Perhaps one of them has a more efficient C-based Image
class or array class will will help. Two, if you're running on an Intel
Pentium-type processor (Windows or Linux), take a look at psyco.
http://www.pythonware.com/products/pil/
http://psyco.sourceforge.net/
If you don't have Intel hardware, you might consider PyInline or SciPy's
weave tool to easily inline bits of C code into your Python.
A quick look at your code suggests that you use a fair amount of abstraction
(nothing wrong with that), then throw it away:
xy = line1.transformPoint(line2, Point(x,y)).to_tuple()
if self.in_bounds(Point(xy[0], xy[1])):
...
In the above, you instantiate a Point using x and y, then pass it to
transformPoint() which returns new Point. You immediately discard that
point by calling .to_tuple(), then in the next statement create yet another
Point with those same coordinates. Why not just have transformPoint accept
a tuple and return a tuple or at least save the transformed Point for later
use?
Skip
More information about the Python-list
mailing list