python - 分数取模。分数类

标签 python numpy floating-point modulo fractions

我的目标是找到包含非常大整数的 numpy 数组的 np.mod(np.array[int], some_number) 。 Some_number 是有理数,但通常不是精确的小数。我想确保模数尽可能准确,因为我需要在后续步骤中对直方图的结果进行分箱,因此浮点精度引起的任何错误可能意味着值最终会出现在错误的分箱中。

我知道 float 的模函数受到浮点精度的限制,所以我犹豫是否使用np.mod(array[int], float)。 然后我遇到了 python 库的分数模块。有人可以建议通过 np.mod(np.array[int], Fraction(int1, int2)) 获得的结果是否比使用 float 更准确?如果不是,解决此类问题的最佳方法是什么?

最佳答案

所以你有一个分数some_number=n/d

计算模数就像执行除法:

a = q*(n/d) + (r/d)

余数是分子为r的分数。 可以这样写:

a*d = q * n + r

您遇到的问题是 a*d 可能会溢出。 但问题可以这样写:

a = q1 * n + r1
d = q2 * n + r2

a*d = (q1*q2*n+q1*r2+q2*r1) * n + (r1*r2)

假设n/d在10到100之间,n>d,q2=0,r2=d,算法为

  1. 计算模 n => r1
  2. 计算 (r1*d) 对 n => r 取模
  3. r 除以 d => 以 n/d 为模

如果是为了放入垃圾箱,则不需要第 3 步。

关于python - 分数取模。分数类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53573266/

相关文章:

c# - 将尾数和指数转换为 double

python - 请求错误: TransportError(400, 'parse_exception', 'No processor type exists with name[attachment]')

python - 查找对 numpy 列进行排序的索引返回零

python - 一元二次方程的错误解

python - 每行 Bin 元素 - NumPy 的矢量化 2D Bincount

c# - Int32.Parse 与 Single.Parse - ("1,234") 和 ("1,2,3,4")。为什么 int 和浮点类型以不同方式解析分隔符?

c - 你如何在c中使用 float 作为指数

python - Scrapy 不会生成 DNS 查找失败网站的网站 URL

python - 如何在没有 MSI 安装程序的情况下在 Windows 上安装 python?

python - 如何将 Tensorboard 添加到 Tensorflow 估算器进程