I'm trying to implement the simplex method in Python so I need to use the Gaussian elimination on arrays. Very often fractions come up and for more clarity and precision I would like to keep the fractional form instead of using floats. I know the 'fractions' module but I'm struggling to use it. I wrote my code using this module but the arrays are always returned with floats. Isn't it possible to print an array with fractions inside ? On this basic example :
>>> A
array([[-1., 1.],
[-2., -1.]])
>>> A[0][0]=Fraction(2,3)
>>> A
array([[ 0.66666667, 1. ],
[-2. , -1. ]])
I would like to have array([[ 2/3, 1. ],
[-2. , -1. ]])
It seems numpy always switches to floats
You can also convert the entire array to an
object
array ofFraction
objects, by abusing the element-wise conversion of numpy arrays under arithmetic operations. (Note: this requires the original array to be an integer array, since arithmetic betweenfloat
s andFractions
producefloat
s.)With the array in this format, any further arithmetic performed will be over elements of type
Fraction
.Since
Fraction
s are not a native NumPy dtype, to store aFraction
in a NumPy array you need to convert the array toobject
dtype:prints
PS. As user2357112 suggests, you might be better off using
sympy
if you wish to use rational numbers. Or, just represent the matrix as a list of lists. There are no speed advantages to using NumPy if your arrays are ofobject
dtype.prints