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

为何numpy函数组合比np.mean计算均值的速度更快?

为什么np.sum(p)/p.size比np.mean(p)更快?

先明确你的测试代码与结果:

测试代码1:手动组合求和与除法

import numpy as np
import time
n = 10000
p = np.array([1] * 1000000)

t1 = time.time()
for x in range(n):
    np.divide(np.sum(p), p.size)
t2 = time.time()

print(t2-t1)

输出:3.9222593307495117

测试代码2:使用np.mean

t3 = time.time()
for x in range(n):
    np.mean(p)
t4 = time.time()

print(t4-t3)

输出:5.271147012710571

出现这种速度差异的核心原因是**np.mean是通用健壮的封装函数,而手动组合sum+divide只执行了最精简的计算逻辑**,具体可以拆解为几点:

  • 额外的参数校验与分支逻辑:np.mean需要适配大量通用场景——比如支持指定axis维度计算均值、允许传入dtype指定求和精度、内部还包含对NaN/Inf的处理分支(默认不跳过但逻辑存在)。这些校验和分支判断会增加运行开销,而手动调用的方式完全跳过了这些步骤,只执行最基础的求和与除法。

  • 类型安全的额外处理:为避免求和时的溢出问题,np.mean内部可能会自动将数组转换为更高精度的类型计算(比如对整数数组用浮点类型求和),这一步类型转换会消耗额外时间。而np.sum在你的测试场景中,对全1整数数组直接用整数类型求和,后续再做除法,步骤更简洁。

  • 函数封装的层级开销:np.mean本质上也是基于求和与除法实现,但它多了一层函数封装,加上内部的各类逻辑判断,整体执行路径比直接调用两个基础函数更长,自然带来额外的时间消耗。

需要注意的是,这种差异仅在大量重复调用的场景下才会显著。如果是单次计算,两者的速度差几乎可以忽略。np.mean的优势在于可读性更强、通用性更好,适合大多数日常场景;手动组合的方式则适合对性能极致追求、且明确输入场景无特殊情况的需求。

内容的提问来源于stack exchange,提问作者Kevin van der Gugten

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 11:35:24