如何计算两个数字之间的比率限制?

时间:2014-10-21 18:35:05

标签: python

我需要计算一个循环中计算的两个数字的比率。 问题是b变得太大,在某些时候等于numpy.inf。 但是,比率a / b应该存在而不是零。

for i in range(num_iter):
    a += x[i]
    b += y[i]
return a/b

计算此类限制的技巧是什么?

如果这个问题是一个错误的stackexchange网站,请告诉我。

更新

循环是有限的,我有两个数组xy,可以事先用大数字或其他东西进行分析。

我想将xy除以一些大数字(重新缩放)可能有用吗?

3 个答案:

答案 0 :(得分:0)

您没有说每次通过循环时添加到ab的内容,但可能两个值都变得太大,以至于将增量截断为整数所引入的任何错误都可以忽略不计在极限。这样,您可以使用任意整数而不是浮点值,它们的大小和精度都有上限。

for i in range(num_iter):
    a += int(...)
    b += int(...)
return a/b

答案 1 :(得分:0)

以Chepner的想法为基础,如何分别跟踪浮点数和int部分,然后在它大于1时将int部分带回来。这样的事情:

for i in range(num_iter):
    afloat += ... - int(...)
    bfloat += ... - int(...)
    a += int(...) + int(afloat)
    b += int(...) + int(bfloat)
    afloat += int(afloat)
    bfloat += int(bfloat)
return a/b

答案 2 :(得分:0)

如果ab具有相同的长度,则您知道平均值的比率等于总和的比率。如果不是,您可以使用项目数的比例来纠正您的比例。

for i in xrange(num_iter):
    numpy.append(a, ...)
    numpy.append(b, ...)

return (mean(a)/mean(b)) * (float(len(b))/len(a))

它可能很慢并且它将使用更多内存,但我认为它应该可以工作。

如果您不想保存所有内容,可以计算每N个元素的均值,并在需要计算时进行加权均值。