[Python-ideas] Float range class

Todd toddrjen at gmail.com
Thu Jan 8 18:58:41 CET 2015

On Thu, Jan 8, 2015 at 6:41 PM, Andrew Barnert <abarnert at yahoo.com> wrote:

> On Jan 8, 2015, at 8:01, Todd <toddrjen at gmail.com> wrote:
> The current approaches for float ranges all have significant limitations.
> numpy.arange pre-allocates the values and doesn't use python floats, both
> of which affect performance.
> How does using numpy floats instead of python floats affect performance,
> unless "it's too fast" or "it uses too little memory" are problems?

If you are using numpy arrays with numpy functions, it isn't an issue.  But
if you are using it in a similar manner to the existing range class, at
some point it is likely going to interact with python native types (such as
adding a numpy scalar to a python float).  This require a type conversion,
either python float to numpy scalar or vice versus, and that is relatively
slow.  I have profiled it, this can be the primary bottleneck in numerical
code that can't be vectorized for whatever reason.

The third approach is to create a new module for various range classes.
> For example there could be a float range, a datetime range, a decimal
> range, a duck-typed range, an abstract base class for making new range
> classes, etc.  However, this is a lot more work (although it wouldn't need
> to all be done at one time).
> I think what you'd really want is a full suite of interval/count/range
> APIs over various types. For example, a datetime range that doesn't even
> allow offsetting or comparing for overlap doesn't seem all that useful. I
> can think of lots of uses for all kinds of range-like things, but none of
> them are well satisfied by just a range view that acts like a sequence and
> has no other methods, short of iterating them (for which a generator
> expression is sufficient--or, if you're doing a lot of them in some app for
> some reason, a one-liner function that wraps up the genexpr).
The capabilities of the classes in the module would need to be discussed if
there was actually a desire for such a module.  I personally only commonly
see float ranges, so I limited the discussion mostly to those.  However, I
wanted to be as comprehensive as possible about the options, so provided
some rough examples of the sorts of things that could potentially appear in
such a module.  Since I don't really have a use for the additional classes
I don't really know what their specific needs would be.

> More generally: if an frange that works exactly like range but with floats
> (and rounding errors) is all you want, that's so trivial to write that it
> doesn't seem worth putting in the stdlib, unless the use case is very
> common.

In numerical computing the use-case is extremely common, in fact I would
say it practically universal.  Ideally it would be vectorized, but in
practice this is often not possible, requiring the use of loops.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20150108/a4df8c34/attachment.html>

More information about the Python-ideas mailing list