我正在尝试实现一种方法,该方法从矩阵类中定义矩阵并使用高斯消元法返回三角矩阵。 考虑以下矩阵:
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这样的分数经常出现,我不想通过使用浮点数来降低精度。那么有没有办法表示分数?我是否必须为那些人定义特殊行为? 为了自己做这件事,我不想使用任何外部模块。
答案 0 :(得分:3)
有一个课程可以完全符合您的要求: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
。