[Numpy-discussion] Some minor issues with numpy and fractions

Pauli Virtanen pav at iki.fi
Mon Apr 27 17:24:02 EDT 2009


Mon, 27 Apr 2009 17:04:17 -0400, Michael S. Gilbert wrote:

> I had mentioned recently some interest in using fractions in the numpy
> polynomial class. Suprisingly, it actually works for the most part out
> of the box, which is great. However, there are some minor issues.  For
> example:
> 
> >>> numpy.poly1d( [ fractions.Fraction(1,2) , fractions.Fraction(1, 8) ]
> ...             )/fractions.Fraction(3,4)

Polydiv can probably be fixed to handle this, it doesn't appear to be 
duck-typing clean in this case.

> > >>> numpy.poly1d( [ fractions.Fraction(1,2)/fractions.Fraction(3,4) ,
> > >>> fractions.Fraction(1,8)/fractions.Fraction(3,4) ] )
> 
> Another item of general interest for numpy is that there is no simple
> way to allocate memory for fraction array.

Something similar came up a while ago. You can do this:

>>> a = np.frompyfunc(Fraction, 1, 1)(np.zeros((50, 50), int))

and so

>>> a[0,0] += Fraction(1, 3)
>>> a /= 7
>>> a
array([[1/21, 0, 0, ..., 0, 0, 0],
       [0, 0, 0, ..., 0, 0, 0],
       [0, 0, 0, ..., 0, 0, 0],
       ..., 
       [0, 0, 0, ..., 0, 0, 0],
       [0, 0, 0, ..., 0, 0, 0],
       [0, 0, 0, ..., 0, 0, 0]], dtype=object)

The trick is to create an universal function out of the object 
constructor, and feed it initializer data. Works for any classes.

I'm undecided whether it'd be a good idea to add a specialized routine 
for doing this...

-- 
Pauli Virtanen




More information about the NumPy-Discussion mailing list