我想在一组数字中找到“真正的”峰值位置。在找到最大值的指数后,我应用加权平均值来确定真正的峰值位置。这需要左侧和右侧两个索引。但是如果最高峰位于索引0或1,或长度为1和长度为2,该怎么办?现在我用ifs做边界检查。之前和之后用两个零填充数组是否会更快,这会使ifs变得不必要?
答案 0 :(得分: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是一个很好的假设。
答案 1 :(得分:1)
如果AVG [i] = [i-2]到[i + 2]的平均值,我喜欢这个想法
AVG [1]是平均a [0]到[3]和
AVG [0]是a [0]到[2]的平均值。
因此创建[-1]和[-2]以满足这些目标,然后“AVG [i] = [i-2]到[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
另一端以类似的方式运作。