首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >大模型开发之Numpy学习:Numpy 核心优势解析 —— 为什么它是 Python 数据科学的 “基石”

大模型开发之Numpy学习:Numpy 核心优势解析 —— 为什么它是 Python 数据科学的 “基石”

作者头像
玄同765
发布2026-01-14 13:47:25
发布2026-01-14 13:47:25
540
举报
在这里插入图片描述
在这里插入图片描述

【个人主页:玄同765

大语言模型(LLM)开发工程师中国传媒大学·数字媒体技术(智能交互与游戏设计) 深耕领域:大语言模型开发 / RAG知识库 / AI Agent落地 / 模型微调 技术栈:Python / LangChain/RAG(Dify+Redis+Milvus)| SQL/NumPy | FastAPI+Docker ️ 工程能力:专注模型工程化部署、知识库构建与优化,擅长全流程解决方案 专栏传送门:LLM大模型开发 项目实战指南Python 从真零基础到纯文本 LLM 全栈实战​​​​​从零学 SQL + 大模型应用落地大模型开发小白专属:从 0 入门 Linux&Shell 「让AI交互更智能,让技术落地更高效」 欢迎技术探讨/项目合作! 关注我,解锁大模型与智能交互的无限可能!

(从 ndarray 本质到性能碾压,彻底搞懂 Numpy 的核心价值)


开篇:Python 原生 list 的 “痛点”

你有没有试过用 Python 原生 list 处理几十万条数据?比如计算 100 万个数的平方根:

代码语言:javascript
复制
# 原生Python计算100万个数的平方根
import time
import math

# 生成100万个数的list
data = [i for i in range(1000000)]

start_time = time.time()
result = [math.sqrt(x) for x in data]
end_time = time.time()

print(f"耗时:{end_time - start_time:.4f}秒")  # 输出:约0.12秒?等下看Numpy的表现…

这个结果看起来还行?但如果是 10 亿个数呢?Python 原生 list 就会暴露内存占用大、运算速度慢的致命缺点。这时候,Numpy就登场了。


一、什么是 Numpy?

Numpy 是Numerical Python的缩写,是 Python 中用于科学计算的核心库。它提供了一个高性能的多维数组对象 ndarray,以及丰富的数组运算函数。

一句话总结:Numpy 是 Python 数据科学的 “基石”——Pandas、Matplotlib、Sklearn 等库都基于 Numpy 构建。


二、核心对象:ndarray

ndarray 是 Numpy 的核心数据结构,它是N 维数组(N-dimensional Array)的缩写。与 Python 原生 list 不同:

  • ndarray 中的所有元素必须是相同类型
  • ndarray 在内存中是连续存储
  • ndarray 支持向量化运算(无需循环即可对所有元素操作)
1. ndarray 的基本创建
代码语言:javascript
复制
import numpy as np

# 创建1维ndarray
arr1 = np.array([1, 2, 3, 4, 5])
print(f"arr1: {arr1}")  # 输出:arr1: [1 2 3 4 5]
print(f"arr1类型: {type(arr1)}")  # 输出:<class 'numpy.ndarray'>
print(f"arr1形状: {arr1.shape}")  # 输出:(5,) —— 5个元素的1维数组

# 创建2维ndarray
arr2 = np.array([[1, 2, 3], [4, 5, 6]])
print(f"\narr2: \n{arr2}")
print(f"arr2形状: {arr2.shape}")  # 输出:(2, 3) —— 2行3列的2维数组

三、性能碾压:ndarray vs Python 原生 list

让我们用同样的任务对比 ndarray 和原生 list 的性能:

代码语言:javascript
复制
import numpy as np
import time
import math

# 生成100万个数
n = 1000000
python_list = [i for i in range(n)]
numpy_array = np.array(python_list)

# 测试1:计算平方根
print("测试1:计算平方根")
start = time.time()
python_result = [math.sqrt(x) for x in python_list]
end = time.time()
print(f"原生list耗时:{end - start:.4f}秒")  # 输出:≈0.12秒

start = time.time()
numpy_result = np.sqrt(numpy_array)
end = time.time()
print(f"ndarray耗时:{end - start:.4f}秒")  # 输出:≈0.004秒

print(f"性能提升:约30倍!\n")

# 测试2:数组相加
print("测试2:数组相加")
python_list2 = [i + 1 for i in range(n)]
numpy_array2 = np.array(python_list2)

start = time.time()
python_result = [x + y for x, y in zip(python_list, python_list2)]
end = time.time()
print(f"原生list耗时:{end - start:.4f}秒")  # 输出:≈0.03秒

start = time.time()
numpy_result = numpy_array + numpy_array2
end = time.time()
print(f"ndarray耗时:{end - start:.4f}秒")  # 输出:≈0.0002秒
print(f"性能提升:约150倍!")

结果令人震撼:ndarray 的运算速度比原生 list 快几十到上百倍


四、ndarray 的核心优势

1. 内存块风格:连续存储,节省空间

Python 原生 list 中的每个元素是指向对象的指针,比如一个 list 包含 100 万个数,就需要 100 万个指针,每个指针占 8 字节(64 位系统),总共占用约 7.6MB 的额外空间。

而 ndarray 的所有元素连续存储在内存中,只需要存储元素本身和少量元数据(如形状、类型),内存占用仅为原生 list 的 1/4 左右。

2. 向量化运算:并行化处理

ndarray 支持向量化运算—— 无需编写循环,即可对所有元素进行操作。这是因为:

  • 向量化运算可以直接映射到底层的 C 语言实现
  • 可以利用CPU 的 SIMD 指令(单指令多数据)进行并行计算
  • 避免了 Python 解释器的循环 overhead
3. 丰富的内置函数:高效且优化

Numpy 提供了大量的内置函数(如 sqrt、sum、mean 等),这些函数都是用 C 语言编写的,并且经过了高度优化。相比之下,Python 原生的循环和函数调用要慢得多。


五、小结

  • Numpy 是什么:Python 科学计算的核心库,提供了高性能的 ndarray 对象
  • ndarray 是什么:N 维数组,所有元素类型相同,连续存储
  • ndarray 的优势
    1. 内存占用小,连续存储
    2. 支持向量化运算,并行化处理
    3. 运算速度比原生 list 快几十到上百倍
    4. 丰富的内置函数,高效且优化

Numpy 的核心优势在于高性能,这也是为什么它成为 Python 数据科学的 “基石”。在接下来的博客中,我们将深入学习 ndarray 的属性、形状、类型和基本操作。


思考与练习

  1. 为什么 ndarray 的元素必须是相同类型?
  2. 尝试用 ndarray 计算 10 亿个数的和,看看需要多长时间?
  3. 对比 ndarray 和原生 list 在内存占用上的差异。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2026-01-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 开篇:Python 原生 list 的 “痛点”
  • 一、什么是 Numpy?
  • 二、核心对象:ndarray
    • 1. ndarray 的基本创建
  • 三、性能碾压:ndarray vs Python 原生 list
  • 四、ndarray 的核心优势
    • 1. 内存块风格:连续存储,节省空间
    • 2. 向量化运算:并行化处理
    • 3. 丰富的内置函数:高效且优化
  • 五、小结
  • 思考与练习
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档