0

我想在一组数字中找到“真实”的峰值位置。在找到最大值的索引后,我应用加权平均值来确定真正的峰值位置。这需要左侧两个索引,右侧两个索引。但是,如果最高峰位于索引 0 或 1,或者长度为 1 和长度为 2 上怎么办?现在我使用 ifs 来做边界检查。在数组之前和之后用两个零填充数组会更快吗,这会使 ifs 变得不必要?

4

2 回答 2

2

解决方案取决于问题。如果峰值位于数组的第一个或两个条目处,那么左侧的数据值是否应该为零,或者可能是前一个或两个元素的反映:

index:  -2 -1  0  1  2  3  4
         0  0 12  8  1  2  3   <<A assume this, or

         1  8 12  8  1  2  3   <<B or this

取决于问题的具体情况。同样的考虑也适用于数组的末尾。

一般来说,如果您的数据是泊松分布,那么 A 可能是最好的估计。如果数据是高斯的,那么 B 是一个很好的假设。

于 2013-08-18T22:05:52.543 回答
1

如果 AVG[i] = a[i-2] 到 a[i+2] 的平均值,我喜欢
AVG[1] 是 a[0] 到 a[3] 的平均值,而
AVG[0] 是a[0] 到 a[2] 的平均值。


因此,创建 a[-1] 和 a[-2] 来满足这些目标,然后可以使用“AVG[i] = a[i-2] 到 a[i+2] 的平均值”的无例外使用。

令 a[-1] 的值使得 (a[-1] 到 a[3]) 的平均值 = (a[0] 到 a[3]) 的平均值。
a[-1] = (a[0] + a[1] + a[2] + a[3])/4

令 a[-2] 的值使得 (a[-2] 到 a[2]) 的平均值 = (a[0] 到 a[2]) 的平均值。
a[-2] = (5*a[0] + 5*a[1] + 5*a[2] -3*a[3])/12

另一端以类似的方式工作。

于 2013-08-19T22:48:37.243 回答