python - NumPy:将小数转换为分数

标签 python numpy decimal fractions

我计算矩阵 A 的逆,例如,

import numpy as np

A = np.diag([1, 2, 3])
A_inv = np.linalg.pinv(A)
print(A_inv)

我明白了,

[[ 1.          0.          0.        ]
 [ 0.          0.5         0.        ]
 [ 0.          0.          0.33333333]]

但是,我想要这个,

[[ 1.          0.          0. ]
 [ 0.          1/2         0. ]
 [ 0.          0.          1/3]]

我试过 np.set_printoptions,

import fractions
np.set_printoptions(formatter={'all':lambda x: str(fractions.Fraction(x))})
print(A_inv)

但是我明白了,

[[1 0 0]
 [0 1/2 0]
 [0 0 6004799503160661/18014398509481984]]

如何在 NumPy 中将小数转换为分数?

最佳答案

这是一个 float 问题 - 回想一下 2/3 在 Python 表示中并不完全是 2/3。

Fraction 类有一个内置方法 limit_denominator() 来处理这个问题:

import fractions
np.set_printoptions(formatter={'all':lambda x: str(fractions.Fraction(x).limit_denominator())})
print(A_inv)

它给出了想要的答案:

[[1 0 0]
 [0 1/2 0]
 [0 0 1/3]]

关于python - NumPy:将小数转换为分数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42209365/

相关文章:

python - 祖先查询的写入限制意味着什么?

python - 使 os.listdir() 列出完整路径

python - 按行降序排序 Nd Numpy 数组

c# - 十进制数的正则表达式

scala - 使用 Scala 值类定义新的数字类型

python - 值错误 : cannot reshape array of size 1251936 into shape (1118, 1118)

javascript - 无法加载模块脚本 : The server responded with a non-JavaScript MIME type of "text/plain". 严格的 MIME 类型检查 i

python - 使用 np.triu_indices 生成索引

python - 如何根据带条件的列值在数据框中插入行?

十六进制数可以用十进制数加减吗?