如何在 python 中表示分数
How to represent fractions in python
我正在尝试实现一种方法,该方法从我定义的矩阵 class 和 returns 使用高斯消元的三角矩阵中获取矩阵。
考虑以下矩阵:
m1 = [[2, -3, -4],
[-1, 4, 5],
[1, -3, -4]]
基本上我需要在每一行中添加前一行的倍数,直到我得到一个主对角线下方所有位置都为 0 的矩阵。按照这个过程,我应该有以下矩阵:
m2 = [[2, -3, -4],
[0, 5/2, 3],
[0, 0, -1/5]]
问题是像 1/3 这样的分数经常会出现,我不想因为使用浮点数而失去精度。那么有没有办法表示分数呢?我必须为那些定义特殊行为吗?
为了自己做,我不想使用任何外部模块。
有一个 class 可以满足您的需求:fractions.Fraction
:
>>> from fractions import Fraction
>>> print(Fraction(5, 6))
5/6
分数在大多数情况下表现得像普通数字:
>>> print(Fraction(5, 6) + 6)
41/6
>>> print(Fraction(5, 6) + Fraction(1, 2))
4/3
>>> print(Fraction(5, 6) + 17.445)
18.278333333333332
最后一个示例表明,如果另一个操作数是 float
,则分数将转换为 float
。这是有道理的,因为您不会期望将精度不确定的浮点数转换为 Fraction
.
我正在尝试实现一种方法,该方法从我定义的矩阵 class 和 returns 使用高斯消元的三角矩阵中获取矩阵。 考虑以下矩阵:
m1 = [[2, -3, -4],
[-1, 4, 5],
[1, -3, -4]]
基本上我需要在每一行中添加前一行的倍数,直到我得到一个主对角线下方所有位置都为 0 的矩阵。按照这个过程,我应该有以下矩阵:
m2 = [[2, -3, -4],
[0, 5/2, 3],
[0, 0, -1/5]]
问题是像 1/3 这样的分数经常会出现,我不想因为使用浮点数而失去精度。那么有没有办法表示分数呢?我必须为那些定义特殊行为吗? 为了自己做,我不想使用任何外部模块。
有一个 class 可以满足您的需求:fractions.Fraction
:
>>> from fractions import Fraction
>>> print(Fraction(5, 6))
5/6
分数在大多数情况下表现得像普通数字:
>>> print(Fraction(5, 6) + 6)
41/6
>>> print(Fraction(5, 6) + Fraction(1, 2))
4/3
>>> print(Fraction(5, 6) + 17.445)
18.278333333333332
最后一个示例表明,如果另一个操作数是 float
,则分数将转换为 float
。这是有道理的,因为您不会期望将精度不确定的浮点数转换为 Fraction
.