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