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

NumPy数组运算速度比Python原生列表更快吗?实测相反结果求解答

问题原因分析
  • 你没有使用NumPy的向量化运算特性,完全浪费了它的性能优势。你测试时用Python原生的map+math.sqrt处理NumPy数组,本质还是走Python循环逻辑,还多了NumPy标量转Python原生类型的额外开销,速度自然比直接处理原生列表慢。
  • 你的测试用例设计不公平:给NumPy的测试把Python列表转NumPy数组的初始化耗时也算进了总耗时,而原生列表的测试没有额外的类型转换开销,进一步拉大了两者的耗时差距。
正确测试方式

要发挥NumPy的性能优势,应该直接调用NumPy内置的向量化方法,全程运算都在C层面完成,没有Python循环开销,测试时也建议把数据准备逻辑放到setup参数中,仅统计运算环节的耗时:

from timeit import timeit
# 原生列表测试(仅统计运算耗时)
print(timeit(stmt='list(map(math.sqrt,a_list))', setup='import math;a_list = list(range(1,100000))', number=1000))
# NumPy正确写法测试(仅统计运算耗时)
print(timeit(stmt='np.sqrt(np_array)', setup='import numpy as np; np_array = np.array(range(1,100000))', number=1000))

实际运行后可以看到NumPy的运算耗时在0.1秒级别,远快于原生列表8秒左右的耗时,和理论描述一致。

补充说明

你之前看到的NumPy性能优势的描述是成立的,核心前提是要使用它的向量化运算能力:所有运算批量在连续内存上通过C实现的逻辑处理,不经过Python层的循环和类型转换。如果依然使用Python原生的循环、map、列表推导式处理NumPy数组,不仅不会获得性能提升,还会因为额外的类型转换开销比原生列表性能更差。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 11:48:04