资讯动态

NumPy 数组运算——Python 数据处理从零到一

发布时间:2026/10/5 2:29:59 来源:尧图企业网站定制
个人主页 for_ever_love__ 欢迎各位大佬莅临其他栏目: 我想学python了 其他栏目: iOS项目总结大全 其他栏目: iOS UI 文章目录AI学习 Day1NumPy 数组运算——Python 数据处理从零到一一、为什么要学 NumPy二、ndarrayNumPy 的核心对象1. 创建数组的常用方式2. 索引与切片三、广播机制不同形状也能运算四、常见坑与注意事项五、NumPy list vs Python list 对比六、小结AI学习 Day1NumPy 数组运算——Python 数据处理从零到一一、为什么要学 NumPy做 AI 的第一步不是模型而是数据处理。你从 CSV、数据库、图片里拿到的原始数据最终都要变成张量喂给模型而这条路上最基础的工具就是 NumPy。一句话概括它的价值Python 原生 list 慢在每次运算都是解释执行NumPy 快在把运算下沉到 C 语言的连续内存块上批量执行。我们先用一组数据感受差距importnumpyasnpimporttime# 纯 Python对 1000 万元求和再平方py_listlist(range(10_000_000))t1time.time()py_result[x*21forxinpy_list]print(f纯 Python 耗时:{time.time()-t1:.3f}s)# NumPy同样的运算np_arrnp.arange(10_000_000)t2time.time()np_resultnp_arr*21print(fNumPy 耗时:{time.time()-t2:.3f}s)运行结果M 系列芯片实测数值因机器而异纯 Python 耗时: 0.612s NumPy 耗时: 0.021s接近30 倍的差距。数据量越大、运算越复杂差距越明显。这就是向量化Vectorization的威力把 for 循环交给库把精力留给逻辑。二、ndarrayNumPy 的核心对象1. 创建数组的常用方式importnumpyasnp anp.array([[1,2,3],[4,5,6]])# 从列表创建2 行 3 列bnp.zeros((2,3))# 全 0cnp.ones((2,3))# 全 1dnp.arange(0,10,2)# 等差序列 [0,2,4,6,8]enp.linspace(0,1,5)# 等分序列 [0, 0.25, 0.5, 0.75, 1]fnp.random.randn(2,3)# 标准正态分布随机数print(a.shape)# (2, 3) 形状print(a.dtype)# int64 元素类型print(a.ndim)# 2 维度三个属性是理解一切的前提shape形状(2, 3)表示 2 行 3 列。AI 里常说的 batch、特征数全部体现在 shape 上dtype元素类型。整数、浮点精度float32/float64直接影响内存和训练速度ndim维度数。一维是向量二维是矩阵三维以上统称张量2. 索引与切片anp.array([[1,2,3],[4,5,6],[7,8,9]])print(a[1,2])# 6 第 2 行第 3 列下标从 0 开始print(a[0,:])# [1 2 3] 第 1 行全部print(a[:,1])# [2 5 8] 第 2 列全部print(a[a4])# [5 6 7 8 9] 布尔索引所有大于 4 的元素布尔索引是数据清洗的利器筛出所有评分大于 4 的电影这类需求一行就够你之前爬虫项目里筛选数据时的思路和它完全一致。三、广播机制不同形状也能运算NumPy 最容易被初学者忽略、又最能提效的特性是广播Broadcasting形状不同的数组运算时小数组会被自动拉伸去匹配大数组。anp.array([[1,2,3],[4,5,6]])# shape (2, 3)bnp.array([10,20,30])# shape (3,)print(ab)# [[11 22 33]# [14 25 36]]# b 被沿着行方向复制成了 (2, 3)广播的规则从最后一个维度往前对齐两个维度要么相等、要么其中一个是 1否则报错。# 实战数据归一化减均值、除标准差datanp.random.randn(100,5)# 100 个样本、5 个特征meandata.mean(axis0)# 每列均值shape (5,)stddata.std(axis0)# 每列标准差shape (5,)normalized(data-mean)/std# 广播一行代码完成整列归一化print(normalized.mean(axis0))# ≈ [0. 0. 0. 0. 0.]axis0表示沿行的方向压扁即对每一列求统计量——这是初学者最容易搞混的点记住口诀axis0 消灭行、算列axis1 消灭列、算行。四、常见坑与注意事项坑现象正确做法浅拷贝b a; b[0]99后a也变了用b a.copy()dtype 溢出np.array([200], dtypenp.int8)得到负数明确指定足够大的类型整数除法老版本/与//混淆统一用浮点运算axis 搞反统计结果形状对不上先想清楚消灭谁浅拷贝问题展开说一下anp.array([1,2,3])ba# 只是引用指向同一块内存b[0]99print(a)# [99 2 3] ← 原数组被改了ca.copy()# 真正的独立副本c[0]-1print(a)# [99 2 3] ← 不受影响五、NumPy list vs Python list 对比对比项Python listNumPy ndarray元素类型可以混装必须统一内存布局分散存储连续内存块运算速度慢解释执行快C 批量执行数学函数需手写循环内置向量化函数适用场景小规模通用数据数值计算 / AI 数据六、小结今天掌握的核心内容NumPy 的本质是连续内存 向量化运算比原生 list 快一个数量级shape / dtype / ndim三个属性是理解数组的钥匙布尔索引做数据筛选广播机制做批量变换axis0 算列、axis1 算行归一化是广播的典型应用赋值是引用、改数据要copy()——这是调试时最常见的幽灵 bug明天我们进入机器学习基础用今天学到的数组操作手写一个线性回归和梯度下降真正理解模型是怎么学的。一句话总结NumPy 把循环变成了表达式数据处理的速度和代码可读性同时起飞。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑