【发布时间】:2012-03-05 04:18:01
【问题描述】:
有没有办法通过仅“访问”每个数组元素一次来计算数组元素与数组平均值的平均距离? (我搜索算法)
例子:
Array : [ 1 , 5 , 4 , 9 , 6 ]
Average : ( 1 + 5 + 4 + 9 + 6 ) / 5 = 5
Distance Array : [|1-5|, |5-5|, |4-5|, |9-5|, |6-5|] = [4 , 0 , 1 , 4 , 1 ]
Average Distance : ( 4 + 0 + 1 + 4 + 1 ) / 5 = 2
简单的算法需要2遍。
1st pass) 读取并累加值,然后将结果除以数组长度以计算数组元素的平均值。
2nd pass) 读取值,将每个元素与之前计算的平均值的距离累加,然后将结果除以数组长度,求出元素与数组平均值的平均距离。
这两个通道是相同的。它是计算一组值的平均值的经典算法。第一个将数组元素作为输入,第二个将每个元素与数组平均值的距离作为输入。
计算平均值可以修改为不累积值,而是在我们从数组中顺序读取元素时“即时”计算平均值。
公式为:
Compute Running Average of Array's elements
-------------------------------------------
RA[i] = E[i] {for i == 1}
RA[i] = RA[i-1] - RA[i-1]/i + A[i]/i { for i > 1 }
其中 A[x] 是数组在位置 x 的元素,RA[x] 是数组元素在位置 1 和 x 之间的平均值(运行平均值)。
我的问题是:
是否有类似的算法来“即时”计算(当我们读取数组的元素时),元素与数组平均值的平均距离?
问题是,当我们读取数组的元素时,数组的最终平均值是未知的。只有运行平均值是已知的。因此,计算与运行平均值的差异不会产生正确的结果。我想,如果存在这样的算法,它可能应该有“能力”以某种方式补偿读取的每个新元素上的计算误差。
【问题讨论】:
-
您可以一次计算距离的平方(l2 范数),但我不知道绝对差 (l1) 的等价物。
-
好吧,为了我想要的目的,也许距离的平方对我有用。它用于图形 HLSL 语言。结果类似于降噪滤波器。所以,只要将噪音降到最低,它就会对我有用 :) 谢谢,我会看看!
-
好的,公式见下文。希望对您有所帮助。