我需要计算一个循环中计算的两个数字的比率。
问题是b
变得太大,在某些时候等于numpy.inf
。
但是,比率a / b应该存在而不是零。
for i in range(num_iter):
a += x[i]
b += y[i]
return a/b
计算此类限制的技巧是什么?
如果这个问题是一个错误的stackexchange网站,请告诉我。
更新
循环是有限的,我有两个数组x
和y
,可以事先用大数字或其他东西进行分析。
我想将x
和y
除以一些大数字(重新缩放)可能有用吗?
答案 0 :(得分:0)
您没有说每次通过循环时添加到a
和b
的内容,但可能两个值都变得太大,以至于将增量截断为整数所引入的任何错误都可以忽略不计在极限。这样,您可以使用任意整数而不是浮点值,它们的大小和精度都有上限。
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)
如果a
和b
具有相同的长度,则您知道平均值的比率等于总和的比率。如果不是,您可以使用项目数的比例来纠正您的比例。
for i in xrange(num_iter):
numpy.append(a, ...)
numpy.append(b, ...)
return (mean(a)/mean(b)) * (float(len(b))/len(a))
它可能很慢并且它将使用更多内存,但我认为它应该可以工作。
如果您不想保存所有内容,可以计算每N个元素的均值,并在需要计算时进行加权均值。