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

Python-numpy-基础入门

NumPy 基础入门:ndarray

🧮 什么是 ndarray?

ndarray(N-dimensional Array)是 NumPy 的核心数据结构——一个同构多维数组。所有元素类型相同,内存连续存储,因此比 Python list 快 10~100 倍。

对比Python listNumPy ndarray
元素类型可以不同必须相同(同构)
内存分散存储连续内存块
运算循环遍历C 级别向量化
速度极快
内存占用小(固定类型)

📦 创建 ndarray

从 Python 数据结构创建

importnumpyasnp# 从列表创建arr=np.array([1,2,3,4,5])print(arr)# [1 2 3 4 5]# 从嵌套列表(二维)mat=np.array([[1,2,3],[4,5,6],[7,8,9]])print(mat)# [[1 2 3]# [4 5 6]# [7 8 9]]# 三维及以上tensor=np.array([[[1,2],[3,4]],[[5,6],[7,8]]])print(tensor.shape)# (2, 2, 2)# 从元组arr=np.array((10,20,30))# 指定数据类型arr=np.array([1,2,3],dtype=np.float64)arr=np.array([1,2,3],dtype='float32')

特殊数组

# 全零a=np.zeros(5)# [0. 0. 0. 0. 0.]a=np.zeros((3,4))# 3×4 全零矩阵a=np.zeros_like(b)# 和 b 形状相同的全零# 全一a=np.ones(5)# [1. 1. 1. 1. 1.]a=np.ones((2,3,4))# 2×3×4 全一张量a=np.ones_like(b)# 全填充a=np.full((3,4),7)# 全为 7 的 3×4 矩阵a=np.full_like(b,3.14)# 单位矩阵a=np.eye(4)# 4×4 单位矩阵a=np.identity(5)# 5×5 单位矩阵a=np.eye(3,4,k=1)# 对角偏移(k>0 向右上偏)# 对角矩阵a=np.diag([1,2,3,4])# 以 [1,2,3,4] 为对角线的矩阵a=np.diag(mat)# 提取矩阵的对角线# 未初始化(更快但数据不定)a=np.empty((3,4))

序列数组 ⭐

# arange: 等差序列(最常用)a=np.arange(10)# [0 1 2 3 4 5 6 7 8 9]a=np.arange(2,10)# [2 3 4 5 6 7 8 9]a=np.arange(0,10,2)# [0 2 4 6 8] 步长=2a=np.arange(10,0,-1)# [10 9 8 7 6 5 4 3 2 1] 倒序# linspace: 等分序列(包含终点!)a=np.linspace(0,1,5)# [0. 0.25 0.5 0.75 1. ]a=np.linspace(0,10,100)# 0~10 均匀取 100 个点# logspace: 对数等分a=np.logspace(0,3,4)# [1. 10. 100. 1000.] 10^0~10^3 取4个# geomspace: 等比数列a=np.geomspace(1,1000,4)# [1. 10. 100. 1000.]# meshgrid: 网格坐标(二维绘图必备)x=np.linspace(-5,5,100)y=np.linspace(-5,5,100)X,Y=np.meshgrid(x,y)# X, Y 都是 (100, 100)Z=np.sqrt(X**2+Y**2)# 网格运算# mgrid / ogrid: 更便捷的网格X,Y=np.mgrid[-5:5:100j,-5:5:100j]# mgrid: 完整网格(100j = 100 个点)X,Y=np.ogrid[-5:5:100j,-5:5:100j]# ogrid: 开放网格(节省内存)

模仿形状创建

a=np.arange(12).reshape(3,4)np.zeros_like(a)# 和 a 同形的全零np.ones_like(a)# 和 a 同形的全一np.full_like(a,3.14)# 和 a 同形的填充np.empty_like(a)# 和 a 同形的未初始化

📐 ndarray 属性

arr=np.arange(24).reshape(2,3,4)print(arr.shape)# (2, 3, 4) — 各维度大小print(arr.ndim)# 3 — 维度数print(arr.dtype)# int32(默认,取决于系统)— 元素类型print(arr.size)# 24 — 总元素数print(arr.itemsize)# 4 — 每个元素的字节数(int32=4字节)print(arr.nbytes)# 96 — 总内存占用(= size × itemsize)print(arr.strides)# (48, 16, 4) — 每维步长print(arr.flags)# 内存布局标志print(arr.base)# 如果是视图,返回原始数组print(arr.T)# 转置视图(不复制数据)print(arr.real)# 实部print(arr.imag)# 虚部print(arr.flat)# 展平迭代器

关于 strides(步长)

arr=np.arange(24).reshape(2,3,4)print(arr.strides)# (48, 16, 4)# 含义:沿 axis=0 跨 48 字节(3×4×4),沿 axis=1 跨 16 字节(4×4),沿 axis=2 跨 4 字节(1 个 int32)

🔢 数据类型(dtype)

常用数值类型

类型别名字节范围
np.int8'i1'1-128 ~ 127
np.int16'i2'2-32768 ~ 32767
np.int32'i4'4-2³¹ ~ 2³¹-1
np.int64'i8',np.int_8-2⁶³ ~ 2⁶³-1
np.uint8'u1'10 ~ 255
np.uint16'u2'20 ~ 65535
np.float16'f2'2半精度
np.float32'f4'4单精度(深度学习常用)
np.float64'f8',np.float_8双精度(默认)
np.complex64'c8'8复数(两 32bit)
np.complex128'c16'16复数(两 64bit)
np.bool_'?'1True / False

特殊类型

# 字符串arr=np.array(['hello','world'],dtype='U10')# Unicode, 最长 10 字符arr=np.array([b'hello',b'world'],dtype='S10')# 字节字符串# 对象(存 Python 对象,性能差,少用)arr=np.array([{'a':1},[1,2,3]],dtype=object)# 结构化类型(存不同类型列)dt=np.dtype([('name','U10'),('age','i4'),('score','f8')])# datetimearr=np.array(['2024-01-01','2024-06-15'],dtype='datetime64[D]')

类型转换

arr=np.array([1,2,3],dtype=np.int64)# 方式一: astype()(推荐,明确创建副本)arr2=arr.astype(np.float64)arr2=arr.astype('float32')# 方式二: 直接指定arr=np.array([1,2,3],dtype='float64')# 方式三: 转换函数np.float64(arr)np.int32(arr)# 查看类型范围print(np.iinfo(np.int16))# min=-32768, max=32767print(np.finfo(np.float32))# bits=32, eps=1.192e-07

类型提升规则

# 不同类型运算时自动提升到更安全类型a=np.array([1,2,3],dtype=np.int32)b=np.array([0.5,1.5,2.5],dtype=np.float32)print((a+b).dtype)# float32c=np.array([1,2,3],dtype=np.float32)d=np.array([0.5,1.5,2.5],dtype=np.float64)print((c+d).dtype)# float64(向更高精度提升)

💡 快速上手示例

importnumpyasnp# 1. 创建一个图像模拟数据image=np.random.default_rng(42).integers(0,256,(1080,1920,3),dtype=np.uint8)print(f'图像形状:{image.shape}')# (1080, 1920, 3)print(f'数据类型:{image.dtype}')# uint8print(f'内存占用:{image.nbytes/1e6:.1f}MB')# 2. 统计信息print(f'最小像素:{image.min()}')print(f'最大像素:{image.max()}')print(f'均值:{image.mean():.1f}')print(f'每个通道均值:{image.mean(axis=(0,1))}')# 3. 灰度化gray=image.mean(axis=2).astype(np.uint8)# (1080, 1920)# 4. 翻转flipped=image[:,::-1,:]# 水平翻转(用切片,零拷贝!)# 5. 裁剪cropped=image[100:500,200:800,:]print(f'裁剪后:{cropped.shape}')# (400, 600, 3)

📝 速查表

需求代码
列表创建np.array([1, 2, 3])
全零np.zeros((3, 4))
全一np.ones((2, 3, 4))
全填充np.full((3, 4), 7)
单位矩阵np.eye(4)
等差数列np.arange(0, 10, 2)
等分数列np.linspace(0, 1, 100)
等比数列np.geomspace(1, 1000, 4)
网格坐标np.meshgrid(x, y)
形状arr.shape
维数arr.ndim
元素类型arr.dtype
总元素数arr.size
内存大小arr.nbytes
类型转换arr.astype(np.float64)

[[numpy-总览|← 返回总览]]

http://www.jsqmd.com/news/1290103/

相关文章:

  • 先把文件变成 Markdown,再交给 AI 干活
  • 3个真实场景告诉你:为什么你需要taskt桌面自动化工具
  • 淘宝返利 app、京东返利 app、拼多多返利 app 差异在哪里
  • RPG Maker Decrypter:三分钟轻松解密RPG游戏加密资源
  • LINQ与F的完美结合:FSharpx.Extras数据查询技巧大全
  • 良率从92%升至99.99%:环凸焊机破解焊接难题 - 汇聚至此
  • EIP低代码平台 应用管理-地图视图
  • 西安低空经济飞手接单系统开发实战指南
  • 端侧AI四层基础设施全链路拆解,各层级企业全景梳理 - 品牌测评鉴赏家
  • HunterPie终极指南:如何快速掌握《怪物猎人:世界》实时数据监控插件
  • 3步清理Windows驱动垃圾:Driver Store Explorer的实用解决方案
  • 微信怎么创建投票小程序?西瓜评选 4 步快速搭建 - 投票小程序
  • SPARTA与JUCE框架:构建专业空间音频插件的技术揭秘
  • 大模型里面到底长什么样?Tokenization+词表映射+MoE+门控网络+稀疏激活+Transformer+Attention全讲透(附代码)
  • 解决virtme-ng常见问题:提升性能与稳定性的8个技巧
  • 2026实力之选:内蒙古俊楠地坪装饰工程有限责任公司——无机水磨石施工领域的专业化服务公司 - 优企名品
  • 全球EMBA含金量解析,民营企业家择校选择指南
  • 怎么让外贸团队主动开发新客户?林芳老师说绩效考核要这样设计 - 外贸圈集团
  • 如何看公共场合开外放且声音很大的人
  • 开发者必看:mobilevitv2_050.cvnets_in1k模型配置文件(config.json)深度解读
  • 3分钟搞定!IDM免费激活完整指南:永久解锁下载加速神器
  • d2s-editor:暗黑破坏神2存档编辑终极指南 - 5分钟学会免费可视化修改
  • 2026 年新发布:陵川热门的徽派中式庭院企业哪家权威,城里买大平层的人,为什么悄悄把院子换成了这玩意儿?-研阁景观设计 - 鉴选官
  • Maya 2022 Python双解释器环境配置与迁移实战指南
  • 如何用one-page-website-html-css-project快速构建响应式单页网站?5个核心步骤详解
  • Apollo配置中心开放API实战:自动化配置管理的企业级解决方案
  • 【路径规划】基于粒子群算法求解机器人动态路径规划Matlab代码
  • 防冻液三年不换?冰点没变,保护可能已经“过期”
  • 学会如何思考
  • 深圳APP开发上线后运维要多少钱详细解析