我怎样才能删除所有分数的分母

How can i remove the denominator of all the Fractions

我使用 NumPy 和分数模块来寻找给定方程组的答案。但我想通过除以最高分母将所有答案转换为整数。当我什至不知道这些值时,我该怎么做。

import numpy
from fractions import Fraction

a=[[3,4,1], 
   [2,3,0], 
   [4,3,-1]]
b=[[1], 
   [0], 
   [-2]]

values=numpy.linalg.solve(a, b)

for i in range(len(values)):
  num=values[i][0]  
  fractional_value=Fraction(num).limit_denominator()
  print(fractional_value)

输出:

-3/7 2/7 8/7

假设我不知道输出结果,我该如何删除最大的分母。/

一组数相除的最小数称为least common multiple。不幸的是,Python 没有提供开箱即用的这个功能,但我们可以从 gcd(Python 提供)和产品。

from math import gcd

def lcm(a, b):
  if a == 0 and b == 0:
    return 0
  return a * b // gcd(a, b)

现在我们要获取一个分数列表并计算它们的分母的最小公倍数。我将使用一个名为 functools.reduce 的小工具(它确实应该在 builtins 中,但那不是重点)

from functools import reduce

frac_list = [Fraction(-3, 7), Fraction(2, 7), Fraction(8, 7)] # Example list
denom_lcm = reduce(lcm, frac_list, 1)

然后我们可以用这个分母乘以所有的分数。

whole_frac_list = [denom_lcm * x for x in frac_list]

当然,如果我们想要 int 类型的值,我们也可以得到

whole_frac_list = [int(denom_lcm * x) for x in frac_list]