news 2026/3/2 2:46:47

Python常用库学习

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python常用库学习

一 Numpy库

1.1 核心概念:ndarray

NumPy的核心是同质数据的多维数组(所有元素类型相同),相比Python列表具有:

  • 内存效率高:连续内存存储

  • 运算速度快:向量化操作,无需Python循环

  • 功能丰富:广播、矩阵运算、随机数等

import numpy as np # 基础属性 arr = np.array([[1, 2, 3], [4, 5, 6]]) print(arr.ndim) # 维度数:2 print(arr.shape) # 形状:(2, 3) print(arr.dtype) # 数据类型:int64 print(arr.size) # 元素总数:6

1.2 数组创建方法

# 从Python结构转换 np.array([1, 2, 3]) # 列表转数组 np.array([(1, 2), (3, 4)], dtype=float) # 指定类型 # 内置创建函数 np.zeros((3, 4)) # 3×4零矩阵 np.ones((2, 3, 4)) # 2×3×4全1数组(三维) np.eye(3) # 3×3单位矩阵 np.full((2, 2), 7) # 填充特定值 # 序列生成 np.arange(0, 10, 2) # [0, 2, 4, 6, 8],步长为2 np.linspace(0, 1, 5) # [0, 0.25, 0.5, 0.75, 1],5个等间距点 # 随机数组 np.random.rand(3, 3) # 0-1均匀分布 np.random.randn(3, 3) # 标准正态分布 np.random.randint(1, 10, (3,3)) # 随机整数 np.random.seed(42) # 设置随机种子保证可复现

1.3数据类型(dtype)

# 常见类型 np.array([1, 2, 3], dtype=np.int32) # 32位整数 np.array([1.0, 2.0], dtype=np.float64) # 64位浮点(默认) np.array([True, False], dtype=np.bool_) # 布尔型 # 类型转换 arr.astype(np.float32) # 转换数据类型

1.4 索引与切片

arr = np.arange(10).reshape(2, 5) # 2×5数组 # 基础索引 arr[0, 1] # 0行1列元素:1 arr[0][1] # 同上(但不建议,效率较低) # 切片(重要:切片是视图view,非副本) arr[:, 1:3] # 所有行,1-2列 arr[::-1] # 行逆序 # 布尔索引(筛选) arr[arr > 5] # 所有大于5的元素(一维结果) arr[(arr > 2) & (arr < 8)] # 多条件(&|, ~分别代表与或非) # 花式索引(整数数组索引) arr[[0, 1], [2, 3]] # 取(0,2)和(1,3)元素 → [2, 8] arr[:, [0, 2, 4]] # 取第0,2,4列 # 获取副本(避免修改原数组) arr[0:2, 0:2].copy()

1.5 数组运算与广播

向量化运算是NumPy的核心优势:

a = np.array([1, 2, 3]) b = np.array([4, 5, 6]) # 元素级运算 a + b # [5, 7, 9] a * b # [4, 10, 18](逐元素乘,非矩阵乘) a ** 2 # [1, 4, 9] np.sqrt(a) # 开方 # 矩阵乘法 A = np.array([[1, 2], [3, 4]]) B = np.array([[5, 6], [7, 8]]) A @ B # 或 np.dot(A, B),矩阵乘法 # 广播机制(Broadcasting) # 标量广播 a + 10 # [11, 12, 13] # 维度广播(自动扩展较小数组) matrix = np.ones((3, 3)) vector = np.arange(3) # [0, 1, 2] matrix + vector # 每行加vector,结果为[[1,2,3], [1,2,3], [1,2,3]] # 广播规则:从后向前比较维度,相等或其中一个为1时可广播

1.6 常用数学与统计函数

arr = np.random.randn(4, 5) # 基础统计 arr.sum() # 总和 arr.mean() # 均值 arr.std() # 标准差 arr.var() # 方差 arr.min() # 最小值 arr.max() # 最大值 arr.argmin() # 最小值索引(扁平化后) arr.argmax() # 最大值索引 # 轴参数(axis)关键概念 arr.sum(axis=0) # 按列求和(压缩行,结果形状(5,)) arr.sum(axis=1) # 按行求和(压缩列,结果形状(4,)) arr.mean(axis=0, keepdims=True) # 保持维度,结果形状(1,5) # 其他数学函数 np.exp(arr) # 指数 np.log(arr) # 自然对数 np.sin(arr) # 三角函数 np.ceil(arr) # 向上取整 np.floor(arr) # 向下取整 np.clip(arr, -1, 1) # 限制在[-1,1]区间

1.7 数组形状操作

arr = np.arange(12) # [0..11] # 重塑(reshape,返回视图或副本) arr.reshape(3, 4) # 3×4数组 arr.reshape(3, -1) # -1自动计算该维度大小 arr.reshape(2, 2, 3) # 三维数组 # 转置与换轴 arr.T # 转置(二维) arr.transpose(1, 0, 2) # 指定轴顺序 arr.swapaxes(0, 1) # 交换两个轴 # 扁平化 arr.flatten() # 返回副本(一维) arr.ravel() # 返回视图(高效,修改会影响原数组) # 增删维度 arr[np.newaxis, :] # 增加轴,形状(1, 12) arr[:, np.newaxis] # 形状(12, 1) np.squeeze(arr) # 移除长度为1的轴

1.8 数组合并与分割

a = np.array([[1, 2], [3, 4]]) b = np.array([[5, 6]]) # 合并 np.vstack((a, b)) # 垂直堆叠(行增加) np.hstack((a, b.T)) # 水平堆叠(列增加) np.concatenate([a, b], axis=0) # 指定轴连接 np.stack([a, a], axis=0) # 在新轴上堆叠,结果(2,2,2) # 分割 np.split(arr, 3, axis=0) # 等分为3份 np.array_split(arr, 3) # 不等分(更常用) np.hsplit(arr, 2) # 水平分割 np.vsplit(arr, 2) # 垂直分割

1.9 线性代数(np.linalg)

A = np.array([[3, 1], [1, 2]]) b = np.array([9, 8]) # 核心运算 np.linalg.inv(A) # 逆矩阵 np.linalg.det(A) # 行列式 np.linalg.matrix_rank(A) # 矩阵秩 np.linalg.solve(A, b) # 解线性方程组 Ax = b # 分解与特征 eigenvalues, eigenvectors = np.linalg.eig(A) # 特征值与特征向量 U, S, Vh = np.linalg.svd(A) # 奇异值分解 # 范数 np.linalg.norm(A) # Frobenius范数 np.linalg.norm(A, ord=2) # 谱范数(最大奇异值)

1.10 实用技巧与最佳实践

# 1. 预分配内存(避免动态扩展) result = np.empty((1000, 1000)) for i in range(1000): result[i] = some_computation() # 2. 布尔掩码赋值 arr[arr < 0] = 0 # 将所有负数置零(clip的替代) # 3. 结构化数组(类似数据库记录) dt = np.dtype([('name', 'U10'), ('age', 'i4'), ('score', 'f4')]) students = np.array([('Alice', 20, 85.5), ('Bob', 21, 92.0)], dtype=dt) students['name'] # 访问字段 # 4. 内存布局 arr = np.array([[1, 2], [3, 4]], order='C') # C风格(行优先,默认) arr = np.array([[1, 2], [3, 4]], order='F') # Fortran风格(列优先) # 5. 视图vs副本 view = arr[::2] # 步长切片,总是视图 copy = arr[::2].copy() # 显式复制 # 6. 性能优化:避免Python循环,使用向量化 # 慢 result = [np.sin(x) for x in arr] # 快 result = np.sin(arr)

1.11 实用建议

  1. 忘掉循环,拥抱向量化:养成直接用数组运算思考的习惯,这是用好 NumPy 的关键。

  2. 理解维度:时刻清楚你的arr.shape,这是进行复杂操作和广播的基础。

  3. 关注数据类型:创建数组时,用dtype参数(如np.float32)可节省大量内存。

  4. 作为基石:NumPy 数组是 Pandas(数据分析)、Scikit-learn(机器学习)等所有主流数据科学库的底层数据结构。

import pandas as pd df = pd.DataFrame(np.random.randn(100, 4), columns=list('ABCD')) values = df.values # 转为NumPy数组(视图或副本视情况而定)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/1 2:58:00

还在为金融分析效率低发愁?3个AI工具让你每天节省2小时

还在为金融分析效率低发愁&#xff1f;3个AI工具让你每天节省2小时 【免费下载链接】Awesome-Chinese-LLM 整理开源的中文大语言模型&#xff0c;以规模较小、可私有化部署、训练成本较低的模型为主&#xff0c;包括底座模型&#xff0c;垂直领域微调及应用&#xff0c;数据集与…

作者头像 李华
网站建设 2026/3/2 4:11:57

AI数字分身工具本地部署全攻略:从技术实现到创意应用

AI数字分身工具本地部署全攻略&#xff1a;从技术实现到创意应用 【免费下载链接】HeyGem.ai 项目地址: https://gitcode.com/GitHub_Trending/he/HeyGem.ai AI数字分身技术正在改变内容创作的边界&#xff0c;而本地部署方案让这一技术更加安全可控。本文将带你了解如…

作者头像 李华
网站建设 2026/2/25 7:15:05

告别配置烦恼!Z-Image-Turbo开箱即用,AI绘画从未如此简单

告别配置烦恼&#xff01;Z-Image-Turbo开箱即用&#xff0c;AI绘画从未如此简单 你有没有过这样的经历&#xff1a; 花两小时配环境&#xff0c;结果卡在CUDA版本不兼容&#xff1b; 好不容易跑起来&#xff0c;输入“水墨山水画”&#xff0c;生成的却是油画质感加英文水印&…

作者头像 李华
网站建设 2026/2/23 12:14:43

7个效率革命技巧:如何用RapidOCR实现图片文字提取全流程优化

7个效率革命技巧&#xff1a;如何用RapidOCR实现图片文字提取全流程优化 【免费下载链接】RapidOCR &#x1f4c4; Awesome OCR multiple programing languages toolkits based on ONNXRuntime, OpenVINO, PaddlePaddle and PyTorch. 项目地址: https://gitcode.com/RapidAI/…

作者头像 李华
网站建设 2026/2/25 5:18:13

PyTorch镜像部署后做什么?典型使用场景实战推荐

PyTorch镜像部署后做什么&#xff1f;典型使用场景实战推荐 1. 部署完成后的第一件事&#xff1a;确认环境是否真正就绪 很多人以为镜像启动成功就万事大吉&#xff0c;其实最关键的一步恰恰被跳过了——验证GPU是否真正可用、Python生态是否完整连通。这不是走流程&#xff…

作者头像 李华
网站建设 2026/2/27 2:18:16

【C++11 之auto 自动类型推导】一个你必须知道的基础知识

原理auto 关键字背后的原理是&#xff0c;编译器会查看变量的初始化表达式&#xff0c;并确定该表达式的类型。然后&#xff0c;编译器将该类型应用于 auto 声明的变量。例如&#xff1a;代码语言&#xff1a;javascriptAI代码解释int x 10; auto y x; // y 的类型是 int在…

作者头像 李华