【问题标题】:Mean of values before and after a specific element特定元素前后的平均值
【发布时间】:2021-09-11 11:23:57
【问题描述】:

我有一个 1 x 400 的数组,其中所有元素的值都高于 1500。但是,我有一些元素的值小于 50,这是错误的度量,我希望在错误的测量数据点并在主阵列中替换它。 例如,元素编号 17 低于 50,所以我想取元素 16 和 18 的平均值,并用新的平均值替换元素 17。 有人能帮助我吗?非常感谢。

【问题讨论】:

  • 你能分享一些你已经拥有的代码吗?您使用什么语言?

标签: average mean


【解决方案1】:

问题中未指定语言,但对于 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,则将其替换为前后元素的平均值。这种方法有两个问题。

  1. 如果 i 是第一个或最后一个元素,则两个值中的一个将是未定义的,并且无法获得平均值。这可以通过使用可用邻居的值来解决,如下所示
  2. 如果一行中的两个值都非常低,那么最左边的将使用最右边的一个来计算它的值,这将导致一个非常低的值。这是您在实践中可能不会遇到的问题,但它是您希望重新计算值的方式的固有结果,您可能需要牢记这一点。

改进版本,牢记边缘情况:

# 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 以外的其他语言或框架。

【讨论】:

  • 非常感谢。我实际上正在使用python。你的回答帮助了我。我很感激
  • 没问题 :) 如果您觉得您的问题已得到解答,您可以将答案标记为“已接受的答案”
猜你喜欢
  • 2018-12-07
  • 2020-11-20
  • 2013-12-29
  • 1970-01-01
  • 2013-07-22
  • 1970-01-01
  • 2018-02-18
  • 2020-07-12
相关资源
最近更新 更多