

【个人主页:玄同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 处理几十万条数据?比如计算 100 万个数的平方根:
# 原生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 是Numerical Python的缩写,是 Python 中用于科学计算的核心库。它提供了一个高性能的多维数组对象 ndarray,以及丰富的数组运算函数。
一句话总结:Numpy 是 Python 数据科学的 “基石”——Pandas、Matplotlib、Sklearn 等库都基于 Numpy 构建。
ndarray 是 Numpy 的核心数据结构,它是N 维数组(N-dimensional Array)的缩写。与 Python 原生 list 不同:
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 和原生 list 的性能:
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 快几十到上百倍!
Python 原生 list 中的每个元素是指向对象的指针,比如一个 list 包含 100 万个数,就需要 100 万个指针,每个指针占 8 字节(64 位系统),总共占用约 7.6MB 的额外空间。
而 ndarray 的所有元素连续存储在内存中,只需要存储元素本身和少量元数据(如形状、类型),内存占用仅为原生 list 的 1/4 左右。
ndarray 支持向量化运算—— 无需编写循环,即可对所有元素进行操作。这是因为:
Numpy 提供了大量的内置函数(如 sqrt、sum、mean 等),这些函数都是用 C 语言编写的,并且经过了高度优化。相比之下,Python 原生的循环和函数调用要慢得多。
Numpy 的核心优势在于高性能,这也是为什么它成为 Python 数据科学的 “基石”。在接下来的博客中,我们将深入学习 ndarray 的属性、形状、类型和基本操作。