📌  相关文章
📜  为每个 Array 元素查找每侧 K 个相邻元素的平均值(1)

📅  最后修改于: 2023-12-03 15:06:17.946000             🧑  作者: Mango

介绍

在编程中,经常需要查找每个数组元素的相邻元素的平均值,这个任务可以通过使用双层循环和计算平均值来完成。

为了更加高效和简洁,我们可以使用一些现代编程语言的功能来编写更简洁、优雅的代码。本文将介绍如何使用不同语言来实现该功能。

实现
Python

在 Python 中,我们可以使用列表解析语法来找到每个元素的相邻元素,并使用 Numpy 库来计算平均值。下面是示例代码:

import numpy as np

def find_average(arr, k):
    return [np.mean(arr[max(0, i-k):min(len(arr), i+k+1)]) for i in range(len(arr))]

该代码使用了列表解析语法,对于每个元素 i,使用 max(0, i-k) 来找到起始位置,这将确保我们不会超出数组的范围。同样,使用 min(len(arr), i+k+1) 来找到结束位置,这样我们也不会超出数组范围。

接下来,我们使用 Numpy 库中的 mean 函数来计算取得的值的平均值。最后,返回所有平均值的列表。

JavaScript

在 JavaScript 中,我们可以使用 Array 类的 map 函数和 reduce 函数来实现该功能。下面是示例代码:

function findAverage(arr, k) {
  return arr.map((_, i) => arr.slice(Math.max(0, i - k), Math.min(arr.length, i + k + 1)).reduce((a, b) => a + b) / (2 * k + 1));
}

在这段代码中,我们使用 Array 类的 map 函数来遍历数组,并使用 _ 占位符来代表元素的值。对于每个元素,我们使用 slice 函数来获取指定范围的元素,然后使用 reduce 函数来计算它们的平均值。

最后,我们将计算平均值除以元素数量,并将结果添加到新的数组中。

TypeScript

在 TypeScript 中,我们也可以使用和 JavaScript 相同的方法来实现该功能。下面是示例代码:

function findAverage(arr: number[], k: number): number[] {
  return arr.map((_, i) => arr.slice(Math.max(0, i - k), Math.min(arr.length, i + k + 1)).reduce((a, b) => a + b) / (2 * k + 1));
}

此代码与 JavaScript 代码相似,只是将类型加入了代码中。

结论

本文介绍了如何为每个数组元素查找相邻元素的平均值,并提供了使用 Python、JavaScript 和 TypeScript 的示例代码。

通过使用类似列表解析语法、map 函数和 reduce 函数等现代编程语言中的功能来完成任务,可以大大减少代码的复杂度,并提高代码的可读性和可维护性。