我的目标是找到包含非常大整数的 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,算法为
- 计算模 n => r1
- 计算 (r1*d) 对 n => r 取模
- r 除以 d => 以 n/d 为模
如果是为了放入垃圾箱,则不需要第 3 步。
关于python - 分数取模。分数类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53573266/