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

Python手动求和、内置sum与numpy.sum性能差异探究

为什么纯Python循环求和比内置sum和numpy.sum更快?

你的测试结果看似反直觉,但其实是不同实现的迭代开销和numpy的适用场景导致的,具体原因如下:

1. 为什么with_sum比basic慢?

内置sum确实是C实现,但你传入的是生成器表达式(1/i for i in range(1, n+1))。生成器每次迭代都需要在Python层面执行1/i的计算,还要调用生成器的__next__方法,这些额外的Python层面操作开销,抵消了sum本身的C级求和优势。

而basic里的纯Python for循环,虽然是Python字节码执行,但操作非常简单:每次循环直接计算1/i并累加,没有生成器迭代的额外调用开销,整体效率反而更高。

2. 为什么with_numpy_sum最慢?

numpy的np.sum的性能优势完全建立在处理numpy数组的向量化运算上,而你传入的是Python生成器。此时numpy无法发挥向量化的优势,反而需要逐个迭代生成器的元素,还要频繁在Python浮点数和numpy内部数值类型之间做转换,加上numpy函数本身的初始化开销,导致整体速度比纯Python循环还慢。

如果要让numpy发挥优势,应该先创建numpy数组再做运算,比如:

import numpy as np
import math

def optimized_numpy_sum(n):
    arr = np.arange(1, n+1, dtype=np.float64)
    s = np.sum(1 / arr)
    return s - math.log(n) - 0.577215664901532861

这个版本利用numpy的向量化C循环,会比basic快得多。

总结

  • 内置sum的C优势体现在处理已有的序列(比如列表),面对生成器时,迭代开销会拖慢速度;
  • numpy的优化只针对数组的批量操作,不要用它处理Python迭代器/生成器;
  • 纯Python循环在这种简单、无额外开销的场景下,反而能获得不错的性能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 03:15:09