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

04_Numpy结构化数组

1 创建结构化数组

import numpy as np

类似C++的结构体,但更加强大,数组的每个元素可以包含多个字段,可以单独处理数组的每一个字段。

1.1 字典方式

dtype的参数是一个字典:

  • names:指定字段名称
  • formats:指定数据类型,可以使用Python类型或Numpy类型
my_dtype = {'names': ('name', 'age', 'weight'),'formats': ('U10', int, 'f8')
}
arr = np.zeros(4, dtype=my_dtype)
arr.dtype
dtype([('name', '<U10'), ('age', '<i4'), ('weight', '<f8')])

1.2 列表元组方式

np.dtype([('name', 'U10'),('age', int),('weight', 'f8'),
])
dtype([('name', '<U10'), ('age', '<i4'), ('weight', '<f8')])

如果类型名称不重要可以省略,仅仅指定数据类型。

np.dtype('U10, i8, f8')
dtype([('f0', '<U10'), ('f1', '<i8'), ('f2', '<f8')])

Numpy数据类型符号表:

符号描述示例
‘b’字节型 (Boolean or raw bytes)np.dtype('b')
‘i’有符号整型 (Signed integer)np.dtype('i4') == np.int32
‘u’无符号整型 (Unsigned integer)np.dtype('u1') == np.uint8
‘f’浮点型 (Floating-point)np.dtype('f8') == np.float64
‘c’复数浮点型 (Complex floating-point)np.dtype('c16') == np.complex128
‘S’, ‘a’字节字符串 (Byte string)np.dtype('S5')
‘U’Unicode编码字符串 (Unicode string)np.dtype('U') == np.str_
‘V’原生数据 (Raw data, void)np.dtype('V') == np.void

2 访问结构化数组

数组的每一个字段依然是一个数组,可以用索引、聚合等操作。这里的操作有点像SQL,字段名像列,索引号像行。

# 创建结构化数组
arr = np.zeros(4, dtype={'names': ('name', 'age', 'weight'),'formats': ('U10', int, 'f8')
})arr['name'] = ['张三', '李四', '王五', '赵六']
arr['age'] = [18, 28, 20, 35]
arr['weight'] = [110.2, 125.3, 103.1, 159.6]
arr['name']
array(['张三', '李四', '王五', '赵六'], dtype='<U10')
# 访问操作
print('arr:', arr)print('\n通过字段名访问age列表:', arr['age'])
print('通过索引访问第一个元素:', arr[0])
print('组合字段和索引访问第一个人的名字:', arr[0]['name'], arr['name'][0])
arr: [('张三', 18, 110.2) ('李四', 28, 125.3) ('王五', 20, 103.1) ('赵六', 35, 159.6)]通过字段名访问age列表: [18 28 20 35]
通过索引访问第一个元素: ('张三', 18, 110.2)
组合字段和索引访问第一个人的名字: 张三 张三

结合布尔索引可以对元素进行筛选。

# 年龄小于25岁的人
print('年龄小于25岁的人的信息', arr[arr['age'] < 25])# 年龄小于25岁的人的姓名和年龄
print('年龄小于25岁的人的信息', arr[arr['age'] < 25][['name', 'age']])
年龄小于25岁的人的信息 [('张三', 18, 110.2) ('王五', 20, 103.1)]
年龄小于25岁的人的信息 [('张三', 18) ('王五', 20)]

结合描述统计方法对字段进行聚合。

# 计算平均年龄
print('平均年龄:', arr['age'].mean())
平均年龄: 25.25
http://www.dtcms.com/a/430662.html

相关文章:

  • 深圳市龙华区价格优化网站建设
  • 博客标题:解密 IntelliJ IDEA 调试:当你的 List 不仅仅是 List
  • 12.如何使用 JavaScript 构建便签应用程序 | 入门项目
  • 第四届云计算、大数据应用与软件工程国际学术会议(CBASE 2025)
  • 全栈工程师项目练习记录
  • Vue CLI为何不显示webpack配置
  • 设计模式之策略模式学习
  • 自己做的网站外国人能访问吗广告设计公司有哪些渠道通路
  • 分布式专题——24 Kafka功能扩展
  • 范式革命:RDMA 如何让网络成为 “分布式内存总线”
  • 如何弄公司网站青岛专业网站制作
  • Langchain4j笔记
  • 云计算介绍
  • 什么是Redis哨兵机制?
  • Web本体语言(OWL)
  • 快学快用系列:一文学会java后端WebApi开发
  • 网站加速器免费永久网站开发学习课程
  • SpringBoot 整合Jasypt 实现配置文件加密读取操作详解
  • apache 服务器如何使用
  • CI/CD 流水线与 agentic AI:如何创建自我纠正的 monorepos
  • Coze源码分析-资源库-编辑工作流-后端源码-IDL/API/应用服务层
  • 网站建设与维护课程设计报告书wordpress 多媒体管理系统
  • 一文了解国产算子编程语言 TileLang,TileLang 对国产开源生态的影响与启示
  • C#和Java正则表达式开发
  • 从零开始:MCP数据库助手(一)- 基础搭建
  • ORB_SLAM2原理及代码解析:SetPose() 函数
  • 蚌埠市建设学校网站网站排名权重怎么做
  • Android android.util.LruCache源码阅读
  • 安卓基础组件020-页面跳转传递数据001
  • Postman 学习笔记 IV:Workflow、Newman 与 Mock Server 实战技巧