特定元素前后的平均值
Mean of values before and after a specific element
我有一个 1 x 400 的数组,其中所有元素值都在 1500 以上。但是,我有一些元素的值<50,这是错误的度量,我想得到之前和之间的元素的平均值在错误的测量数据点之后将其替换在主数组中。
例如,元素编号 17 低于 50,所以我想取元素 16 和 18 的平均值,并用新的平均值替换元素 17。
有人能帮助我吗?非常感谢。
问题中没有指定语言,但是对于 Python 你可以使用 List Comprehension:
# array with 400 values, some of which are incorrect
arr = [...]
arr = [arr[i] if arr[i] >= 50 else (arr[i-1]+arr[i+1])/2 for i in range(len(arr))]
即arr[i]小于50时,将取其前后元素的平均值代替。这种方法有两个问题。
- 如果i是第一个或最后一个元素,那么这两个值中有一个是未定义的,得不到均值。这可以通过使用可用邻居的值来解决,如下所述
- 如果一行中有两个值很低,最左边的值会用最右边的值来计算它的值,这会导致值很低。这在实践中可能不会出现在您身上,但它是您希望重新计算值的方式的固有结果,您可能需要牢记这一点。
改进版本,牢记边缘情况:
# don't alter the first and last item, even if they're low
arr = [arr[i] if arr[i] >= 50 or i == 0 or i+1 == len(arr) else (arr[i-1]+arr[i+1])/2 for i in range(len(arr))]
# replace the first and last element if needed
if arr[0] < 50:
arr[0] = arr[1]
if arr[len(arr)-1] < 50:
arr[len(arr)-1] = arr[len(arr)-2]
我希望这个答案对您有用,即使您打算使用 python 以外的其他语言或框架。
我有一个 1 x 400 的数组,其中所有元素值都在 1500 以上。但是,我有一些元素的值<50,这是错误的度量,我想得到之前和之间的元素的平均值在错误的测量数据点之后将其替换在主数组中。 例如,元素编号 17 低于 50,所以我想取元素 16 和 18 的平均值,并用新的平均值替换元素 17。 有人能帮助我吗?非常感谢。
问题中没有指定语言,但是对于 Python 你可以使用 List Comprehension:
# array with 400 values, some of which are incorrect
arr = [...]
arr = [arr[i] if arr[i] >= 50 else (arr[i-1]+arr[i+1])/2 for i in range(len(arr))]
即arr[i]小于50时,将取其前后元素的平均值代替。这种方法有两个问题。
- 如果i是第一个或最后一个元素,那么这两个值中有一个是未定义的,得不到均值。这可以通过使用可用邻居的值来解决,如下所述
- 如果一行中有两个值很低,最左边的值会用最右边的值来计算它的值,这会导致值很低。这在实践中可能不会出现在您身上,但它是您希望重新计算值的方式的固有结果,您可能需要牢记这一点。
改进版本,牢记边缘情况:
# don't alter the first and last item, even if they're low
arr = [arr[i] if arr[i] >= 50 or i == 0 or i+1 == len(arr) else (arr[i-1]+arr[i+1])/2 for i in range(len(arr))]
# replace the first and last element if needed
if arr[0] < 50:
arr[0] = arr[1]
if arr[len(arr)-1] < 50:
arr[len(arr)-1] = arr[len(arr)-2]
我希望这个答案对您有用,即使您打算使用 python 以外的其他语言或框架。