我的目标是找到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,算法是
计算模 n => r1
计算 (r1*d) 模 n => r
r 除以 d => 模数 n/d
如果是用于放入垃圾箱,则不需要第 3 步。
添加回答
举报
0/150
提交
取消