scipy.optimize.linprog
似乎是C / Fortran库的包装器,无论输入类型如何,它总是使用浮点数。
from scipy import optimize as opt
from fractions import Fraction
import numpy as np
lp = opt.linprog
def frac(arr):
"convert array or number to rational form"
if isinstance(arr, int) or isinstance(arr, float):
return Fraction(arr)
else:
return list(map(frac, arr))
A_ub = frac([
[ 1, 2, 3 ],
[ 4, 5, 6]
])
A_ub = np.array(A_ub, dtype=object)
b_ub = frac( [ 1, 2 ] )
b_ub = np.array(b_ub, dtype=object)
c = frac( [ -1, -2, -3 ])
c = np.array(c, dtype=object)
result = lp(A_ub=A_ub, b_ub=b_ub, c=c)
print result.x.dtype
打印float64
是否有一个类似的库,在numpy / scipy中有一个不同的求解器,它能够操纵任意python对象并使用它们的方法+, -, *, /
而不是强制一切到浮点?