为了账号安全,请及时绑定邮箱和手机立即绑定

模与fractions.Fraction 类

模与fractions.Fraction 类

慕田峪4524236 2021-09-02 20:27:39
我的目标是找到np.mod(np.array[int], some_number)一个包含非常大整数的 numpy 数组。Some_number 是有理数,但通常不是精确的小数。我想确保模数尽可能准确,因为我需要在后面的步骤中对直方图的结果进行分箱,因此由于浮点精度引起的任何错误都可能意味着值最终会进入错误的分箱。我知道带浮点数的模函数受到浮点精度的限制,所以我犹豫要不要使用np.mod(array[int], float). 然后我遇到了 python 库的分数模块。有人可以就通过获得的结果是否np.mod(np.array[int], Fraction(int1, int2))比使用浮点数更准确提出建议?如果不是,那么解决此类问题的最佳方法是什么?
查看完整描述

1 回答

?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

所以你有一个分数 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 步。


查看完整回答
反对 回复 2021-09-02
  • 1 回答
  • 0 关注
  • 163 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信