Loopless syntax for 2d in NumPy (or Numarray)

2mc mcrider at bigfoot.com
Tue Oct 21 23:50:17 EDT 2003


"Terry Reedy" <tjreedy at udel.edu> wrote in message news:<5tqdnemUQZWYtQmiRVn-tQ at comcast.com>...
> "2mc" <mcrider at bigfoot.com> wrote in message
> news:500a4565.0310192044.dce705b at posting.google.com...
> > "Terry Reedy" <tjreedy at udel.edu> wrote in message
>  news:<VfqdnZ2_Z8mclg6iRVn-vA at comcast.com>...
> > > Just curious: is this a real problem, or one you made up to stump
> > > NumPy?
> >
> > Yes, this is a real problem.  Of course, it involves much more than
> > this.  But, yes, I would like to get a running list of highest
>  values
> > within a range of values.
>  
> > > I think the way to avoid redoing the max from scratch with each
>  move
> > > of the window is to use a heap augmented by a circular index that
> > > enables easy replacement of the departing number with the incoming
> > > number.  After the replacement, re-establish the heap property and
> > > record the max.  (For more on heaps, see heapq.py in the lib or
> > > various algorithm books.)
> >
> > I didn't know there was a function called heapq.py.
> 
> It is a module added to the standard library perhaps in 2.2.  Not
> surprised if not in books.
> 
> > Your suggestion to use heapq was interesting.  Basically, in my
> > current program I use something similar.  I sort, enter new data
>  into
> > oldest data's spot, resort, find the max, and repeat.
> 
> Same idea.  I think best resort method should be binary search for
> insertion spot followed by shift-1 movement of off-by-1 block toward
> empty spot and then insertion of new item in proper place.
> 
> The same operation for heaps would be O(logN) instead of O(N), but
> with a higher constant, so it might or might not be faster for N=19.
> (But I suspect it would be.)
> 
> > I have a couple of questions about heapq.  The website says that it
>  is
> > an array but that it works on lists.  So, heapq would not work on
> > NumPy arrays, right?  And, it is then a normal Python array rather
> > than a NumPy array, right?
> 
> The algorithms, with adjustment, can use any type of random access
> array, but there would not be any obvious benefit of shifting.  heapq,
> as implied by the q for queue, is intended for heap use as priority
> queue.  It has a replace_max function but not a
> replace-arbitrary-element operation.  Regardless of what array type
> you use, you would have to write your own replace function.  But it
> should be a straight forward adjustment of the current replace
> function -- once you understand heaps.
> 
> > Is there a comparable speed increase using
> > heapq over explicit Python loops as there is in NumPy over explicit
> > Python loops?
> 
> No, heapq is written in Python and uses normal looping.  But do keep
> in mind that pure Python code, especially when using ints, floats, and
> loops, can ofter run several times faster when psyco-ized.

Thanks for your responses.  They have been most helpful.  Thank you
for your kindness.

I've looked a little bit at Psyco.  I have a couple of questions -
what else is new? :-)

1. Would a psyco-ized normal Python program that performs calculations
be slower, faster, or as fast as the equivalent in NumPy?

2. Can Numerical Python be psyco-ized?  I'm supposing it cannot.

Thanks again.  I appreciate it.

Matt


> 
> > Thanks for your response.  I appreciate it.
> 
> Welcome,
> 
> Terry J. Reedy




More information about the Python-list mailing list