You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何不使用np.mean()实现支持n维数组的NumPy均值函数?

不借助内置函数实现n维数组的通用均值计算

我正在学习编程,出于思维实验目的,希望在不使用内置函数(已知内置函数已优化,实际场景会优先使用)的前提下实现均值计算。目前已写出仅适用于向量的均值函数,但传入矩阵时会失效;修改后的适配矩阵版本又无法处理向量及三维以上数组。想了解如何不借助内置函数完成n维数组的求和,进而实现通用的均值计算。

尝试的代码如下:

第一个版本(仅支持向量):

def take_mean(arr):
  sum = 0
  for i in arr:
    sum += i
  mean = sum/np.size(arr)
  
  return mean

第二个版本(仅支持矩阵,且存在bug:应累加j而非i):

def take_mean(arr):
  sum = 0
  for i in arr:
    for j in i:
      sum += i
  mean = sum/np.size(arr)
  
  return mean

核心思路:递归遍历n维数组求和

n维数组是嵌套的可迭代结构,通过递归可以逐层遍历:若当前元素是数值则直接累加,若是可迭代的子数组(排除字符串这类特殊可迭代对象),则递归进入子数组继续处理。

通用实现代码

def recursive_sum(arr):
    total = 0
    for element in arr:
        # 判断是否为可迭代的数组类型(排除字符串避免误处理)
        if isinstance(element, (list, tuple)):
            # 若用numpy数组,可改为isinstance(element, np.ndarray)
            total += recursive_sum(element)
        else:
            total += element
    return total

def take_mean(arr):
    # 递归统计总元素个数,脱离内置函数依赖
    def count_elements(arr):
        count = 0
        for element in arr:
            if isinstance(element, (list, tuple)):
                count += count_elements(element)
            else:
                count += 1
        return count
    
    total_sum = recursive_sum(arr)
    element_count = count_elements(arr)
    if element_count == 0:
        raise ValueError("数组不能为空")
    return total_sum / element_count

代码说明

  1. 递归求和:recursive_sum逐层遍历数组,遇到子数组就递归深入,直到找到数值元素完成累加。
  2. 元素计数:count_elements用同样的递归逻辑统计所有维度的总元素数,完全脱离np.size这类内置函数。
  3. 均值计算:总求和除以总元素数,同时增加空数组判断避免除以0错误。

测试示例

# 测试向量
vec = [1, 2, 3, 4]
print(take_mean(vec))  # 输出2.5

# 测试矩阵
mat = [[1,2], [3,4]]
print(take_mean(mat))  # 输出2.5

# 测试三维数组
three_d = [[[1,2], [3,4]], [[5,6], [7,8]]]
print(take_mean(three_d))  # 输出4.5

注意事项

  • 若使用numpy数组而非原生列表/元组,需将isinstance的判断条件改为isinstance(element, np.ndarray)。
  • 代码默认元素为数值类型,若数组中存在非数值元素需额外添加类型校验。

内容的提问来源于stack exchange,提问作者Kliker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 15:48:28