当前位置: 首页 > news >正文

NumPy 基础知识

1. NumPy 是什么?

NumPy 是 Python 的数值计算库,核心是 ndarray(多维数组)。你可以把它理解为"超级列表"——比 Python 列表快 100 倍以上,而且支持批量数学运算。


2. 数组创建

2.1 从列表创建

importnumpyasnp a=np.array([1,2,3,4,5])print(a)# [1 2 3 4 5]print(type(a))# <class 'numpy.ndarray'>

2.2 创建二维数组(矩阵)

matrix=np.array([[1,2,3],[4,5,6],[7,8,9]])

想象成一个表格:
1 2 3
4 5 6
7 8 9

2.3 常用快捷创建方式

┌────────────────────┬────────────────┬───────────────────────────────┐ │ 函数 │ 作用 │ 例子 │ ├────────────────────┼────────────────┼───────────────────────────────┤ │ np.zeros((3,4))│ 全0矩阵 │34列的0│ ├────────────────────┼────────────────┼───────────────────────────────┤ │ np.ones((2,3))│ 全1矩阵 │23列的1│ ├────────────────────┼────────────────┼───────────────────────────────┤ │ np.full((3,4),7)│ 填充指定值 │34列全填7│ ├────────────────────┼────────────────┼───────────────────────────────┤ │ np.empty((3,4))│ 占位,不初始化 │ 快速申请内存 │ ├────────────────────┼────────────────┼───────────────────────────────┤ │ np.eye(3)│ 单位矩阵 │ 对角线是1,其余是0│ ├────────────────────┼────────────────┼───────────────────────────────┤ │ np.arange(0,10,2)│ 整数范围 │[0,2,4,6,8],指定步长 │ ├────────────────────┼────────────────┼───────────────────────────────┤ │ np.linspace(0,1,5)│ 等间隔 │[0,0.25,0.5,0.75,1],指定个数 │ └────────────────────┴────────────────┴───────────────────────────────┘

2.4 随机数组

np.random.randn(2,3)# 标准正态分布(均值0,标准差1)np.random.rand(2,3)# 0~1之间均匀分布np.random.randn(2,3)生成23列的随机数,大多数值在-33之间。神经网络训练前需要给权重赋初始值,用随机数(而不是全0)可以让每个神经元学到不同的东西。 random.uniform — 均匀分布,任何值出现的概率一样,完全"公平"的随机。 好比:转盘抽奖,每个格子大小一样,落在哪里概率相同。 np.random.uniform(low=0,high=1,size=(3,4))# low: 最小值(默认0)# high: 最大值(默认1)# size: 形状random.normal — 正态分布(高斯分布)。即:中间多,两边少,大多数值集中在均值附近。 就好比:全班考试成绩,大多数人在70~80分,极高极低的很少。常用于:神经网络权重初始化。 np.random.normal(loc=0,scale=1,size=(3,4))# loc: 均值(中心在哪)默认0# scale: 标准差(散开程度)默认1# size: 形状

2.5 _like系列 — 按已有数组形状创建

a=np.array([[1,2,3],[4,5,6]])# shape (2, 3)np.zeros_like(a)# [[0,0,0],[0,0,0]] 同形状全0np.ones_like(a)# [[1,1,1],[1,1,1]] 同形状全1np.full_like(a,9)# [[9,9,9],[9,9,9]] 同形状全9np.empty_like(a)# 同形状,值不确定什么时候用: 不想手动写 shape,直接跟着已有数组的形状走。# 典型场景:创建和输入同形状的输出容器output=np.zeros_like(input_data)

3. 数组属性

x=np.random.randn(3,4,5)x.shape# (3, 4, 5) 形状,最常用x.ndim# 3 几维x.size# 60 元素总数 = 3×4×5x.dtype# float64 数据类型

关于 shape 的写法

(3,)表示一维数组有3个元素。逗号不能省,因为 Python 中(3)只是数字3(3,)才是元组。 np.array([1,2,3]).shape# (3,) 一维np.array([[1,2,3]]).shape# (1, 3) 二维,1行3列np.array([[1],[2],[3]]).shape# (3, 1) 二维,3行1列

4. 形状变换

4.1 reshape — 改形状

元素总数不变,只是换一种排列方式:

a=np.arange(12)# [ 0 1 2 ... 11],shape (12,)b=a.reshape(3,4)# 变成 3行4列c=a.reshape(2,3,2)# 变成 2×3×2 的三维-1可以自动推算: a.reshape(4,-1)# -1自动算出3 → shape (4, 3)a.reshape(-1,6)# -1自动算出2 → shape (2, 6)

4.2 flatten — 展平成一维

b=np.array([[1,2],[3,4]])b.flatten()# [1, 2, 3, 4]

4.3 transpose — 转置

行变列,列变行:

mat=np.array([[1,2,3],[4,5,6]])# shape (2, 3)mat.T# shape (3, 2)# [[1, 4],# [2, 5],# [3, 6]]

4.4 增加/删除维度

vec=np.array([1,2,3])# shape (3,)vec[np.newaxis,:].shape# (1, 3) 加一个行维度vec[:,np.newaxis].shape# (3, 1) 加一个列维度np.squeeze(vec[np.newaxis,:]).shape# (3,) 去掉大小为1的维度

5. 数学运算

5.1 元素级运算

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.exp(a)# [e^1, e^2, e^3]

5.2 矩阵乘法

用 @ 或 np.dot(),规则是(m,n)@(n,p)=(m,p): X=np.random.randn(4,3)# 4个样本,3个特征W=np.random.randn(3,5)# 权重矩阵Y=X @ W# shape (4, 5)注意区别: a*b# 逐元素相乘a @ b# 矩阵乘法(内积)

6. 广播机制(Broadcasting)

广播让形状不同的数组也能做运算,NumPy 自动"拉伸"小的那个。

就像你在公司发通知:你写了一张纸条:[涨薪10%, 涨薪20%, 涨薪30%],要发给3个部门,每个部门4个人。你不需要手写12张,复印3份就行。

NumPy 的广播做的就是这件事——小的那个自动复印,凑成和大的一样的形状,然后再运算。

6.1 标量广播

a=np.array([1,2,3])a+10# [11, 12, 13] 10自动变成[10, 10, 10]

6.2 一维 + 二维

a=np.array([[1,2,3],[4,5,6]])# shape (2, 3)b=np.array([10,20,30])# shape (3,)a+b# 得到:[[11, 22, 33],# [14, 25, 36]]# b 被复制了一行,变成 [[10,20,30],[10,20,30]]

6.3 广播规则

从右往左对齐,每个维度要么相等,要么其中一个是1:

a: (2, 3)
b: (3,) ← 从右对齐,3对3可以,左边缺的补1 → (1,3) → 拉伸成 (2,3)

为什么是"从右对齐"?因为短的那个从末尾开始对,缺少的左边维度自动补1。

有1就能拉伸:维度是1的代表"只有一个值",复制多少份都不矛盾:

a=np.array([[1,2,3],[4,5,6]])# shape (2, 3)b=np.array([[10],[20]])# shape (2, 1)a+b# [[11, 12, 13],# [24, 25, 26]]# b 的列是1,自动拉伸成3列[[10,10,10],[20,20,20]]

7. axis 参数

axis 告诉 NumPy 沿哪个方向操作。口诀:axis=几,就是把第几个维度"消掉"。

a=np.array([[1,2,3],[4,5,6]])# shape (2, 3)axis=0,沿行方向(从上往下)压扁,每列加起来:123↓ ↓ ↓456---------579np.sum(a,axis=0)# [5, 7, 9] shape (3,) 消掉了第0维(2行)axis=1,沿列方向(从左往右)压扁,每行加起来:123=6456=15np.sum(a,axis=1)# [6, 15] shape (2,) 消掉了第1维(3列)
常用函数都支持 axis:np.sum、np.mean、np.max、np.min、np.argmax、np.sort。

8. 统计函数

data=np.array([[1,2,3],[4,5,6]])np.max(data)# 6 全局最大np.max(data,axis=1)# [3, 6] 每行最大np.max(data,axis=0)# [4, 5, 6] 每列最大np.mean(data)# 3.5 均值np.std(data)# 标准差np.sum(data)# 21 求和np.argmax(data,axis=1)# [2, 2] 每行最大值的下标

9. 数据类型转换

a=np.array([1.0,2.0,3.0])# 默认 float64a_f32=a.astype(np.float32)# 转成 float32,省内存

10. np.indices — 给空间贴坐标

np.indices((3,4,5)) 给一个 3×4×5 的空间里每个位置生成坐标,返回3个矩阵,分别存每个位置的第0维坐标、第1维坐标、第2维坐标。

idx=np.indices((3,4,5))idx[0]→ 每个格子的"层号"idx[1]→ 每个格子的"行号"idx[2]→ 每个格子的"列号"好处是不用写循环,直接批量计算: i,j,k=np.indices((3,4,5))distance=np.sqrt(i**2+j**2+k**2)# 一行算出所有点到原点的距离

▎ np.indices 就是提前把所有坐标算好存起来,让你在做矩阵运算时能直接用坐标参与计算,避免写多层 for 循环。如果你发现自己要写嵌套循环,而且循环变量 i、j 本身要参与计算,就可以考虑用它。


http://www.cnnetsun.cn/news/1769378.html

相关文章:

  • 园区管理不用愁,人脸识别打造高效智慧园区
  • 华一拼团热度背后:中小商家的「流量狂欢」与「经营基本功」思考
  • 赛博朋克2077存档修改器:新手快速上手完整指南
  • Mac微信消息本地留存解决方案全攻略:打造个人数据安全屏障
  • 2026年揭秘:变频器核心二极管,原厂供应链如何重塑产业格局?
  • cfn-lint核心功能解析:深入理解AWS资源模式验证
  • 别再只会用Entity了!Cesium点线面可视化,试试这几种更高效的实现方案
  • ChatGPT+Draw.io:5分钟搞定专业流程图,零代码也能玩转可视化
  • Python+PyQt5打造局域网电脑唤醒工具:从UI设计到一键唤醒全流程
  • 技术分享】单机无穷大系统短路与断线故障仿真分析:三相短路、单相接地、两相接地、两相相间短路,单...
  • 从 Apache SeaTunnel 走向 ASF Member:一位开发者的长期主义样本攀
  • 在昇腾Atlas 800I A2上,用vLLM-Ascend 0.9.1-dev部署Qwen2.5-7B的保姆级避坑指南
  • 基于Xinference的向量化模型部署实战:从环境配置到LangChain集成
  • Codex 陷阱:AI 生成代码的安全雷区 —— 路径遍历漏洞深度剖析与防御实战
  • 阿里达摩院:细胞状态硅基模拟+扰动响应分析
  • 改进鲸鱼优化算法(IWOA)的效果与优化空间
  • 从零到一:Vitis AI 开发环境搭建全攻略(VMware + Ubuntu 20.04 + 必备软件)
  • BELTTT:专业太阳能逆变解决方案提供商
  • STM32F103C8T6实战:用AD7606和AD698搞定RVDT角度测量(附完整代码与避坑记录)
  • Agent记忆怎么做?中大团队创新突破
  • 【.NET 9 AI推理性能跃迁指南】:实测提升3.7倍吞吐、降低62%内存占用的7大编译器级优化秘技
  • 算法竞赛选手必看:ICPC香港站H题Mah-jong的三进制状压与双指针解法详解
  • OpenClaw技能组合:Kimi-VL-A3B-Thinking与其他AI模型的管道协作
  • 保姆级避坑指南:在只有一台能上网的服务器上,搞定Proxmox VE 7.0三节点集群和Ceph存储
  • 深入剖析FlashDB TSDB:嵌入式时序数据存储实战指南
  • 1个网关=100+设备兼容:耐达讯自动化CC-Link IE 转 EtherCAT重新定义工业协议转换价值
  • Windows更新修复工具深度技术指南:从问题诊断到系统优化
  • 空间智能底座:破解数字孪生困局,构建可计算物理世界
  • Windows 11终极优化指南:使用Win11Debloat实现系统性能提升的完整教程
  • 什么是MVP? 在项目里如何使用?