HoRain云--NumPy数据类型全解析:高效计算的关键
HoRain云小助手个人主页 个人专栏: 《Linux 系列教程》《c语言教程》⛺️生活的理想就是为了理想的生活!⛳️ 推荐前些天发现了一个超棒的服务器购买网站性价比超高大内存超划算忍不住分享一下给大家。点击跳转到网站。专栏介绍专栏名称专栏介绍《C语言》本专栏主要撰写C干货内容和编程技巧让大家从底层了解C把更多的知识由抽象到简单通俗易懂。《网络协议》本专栏主要是注重从底层来给大家一步步剖析网络协议的奥秘一起解密网络协议在运行中协议的基本运行机制《docker容器精解篇》全面深入解析 docker 容器从基础到进阶涵盖原理、操作、实践案例助您精通 docker。《linux系列》本专栏主要撰写Linux干货内容从基础到进阶知识由抽象到简单通俗易懂帮你从新手小白到扫地僧。《python 系列》本专栏着重撰写Python相关的干货内容与编程技巧助力大家从底层去认识Python将更多复杂的知识由抽象转化为简单易懂的内容。《试题库》本专栏主要是发布一些考试和练习题库涵盖软考、HCIE、HRCE、CCNA等目录⛳️ 推荐专栏介绍基本数据类型1. 整数类型2. 浮点类型3. 复数类型4. 布尔类型5. 字符串类型数据类型操作1. 查看和修改数据类型2. 创建时指定数据类型3. 数据类型转换规则特殊数据类型1. 结构化数据类型记录数组2. 日期时间类型类型字符码数据类型信息内存优化技巧1. 选择合适的数据类型2. 查看内存使用总结NumPy 的核心优势之一是其强大的数据类型系统这确保了数值计算的高效性和内存使用的优化。NumPy 数组ndarray是同质的即所有元素必须是相同的数据类型。基本数据类型1.整数类型类型描述范围int8/uint88位有符号/无符号整数-128~127 / 0~255int16/uint1616位有符号/无符号整数-32768~32767 / 0~65535int32/uint3232位有符号/无符号整数-2³¹~2³¹-1 / 0~2³²-1int64/uint6464位有符号/无符号整数-2⁶³~2⁶³-1 / 0~2⁶⁴-1int_/uint平台默认整数通常为int64取决于平台import numpy as np # 指定整数类型 arr np.array([1, 2, 3], dtypenp.int32) print(arr.dtype) # int32 # 创建特定类型的零数组 zeros_int8 np.zeros(5, dtypenp.int8) print(zeros_int8.dtype) # int82.浮点类型类型描述精度float16半精度浮点数约5位小数float32单精度浮点数约7位小数float64双精度浮点数默认约15位小数float128扩展精度浮点数某些平台更高精度float_平台默认浮点数通常为float64# 默认浮点类型是float64 arr_float np.array([1.0, 2.0, 3.0]) print(arr_float.dtype) # float64 # 指定单精度 arr_float32 np.array([1.0, 2.0, 3.0], dtypenp.float32) print(arr_float32.dtype) # float32 # 半精度示例 arr_float16 np.array([1.0, 2.0], dtypenp.float16) print(arr_float16.dtype) # float163.复数类型类型描述complex64由两个float32组成实部和虚部complex128由两个float64组成默认complex256由两个float128组成complex_平台默认复数类型# 复数数组 arr_complex np.array([12j, 34j]) print(arr_complex.dtype) # complex128 # 指定单精度复数 arr_complex64 np.array([12j, 34j], dtypenp.complex64) print(arr_complex64.dtype) # complex644.布尔类型# 布尔类型 arr_bool np.array([True, False, True]) print(arr_bool.dtype) # bool # 注意bool在内存中占1个字节 print(arr_bool.itemsize) # 15.字符串类型# 固定长度的字符串 arr_str np.array([hello, world]) print(arr_str.dtype) # U5 (长度为5的Unicode字符串) # 指定最大长度 arr_str_fixed np.array([abc, defg], dtypeS10) # 最大10字节 print(arr_str_fixed.dtype) # |S10 # Unicode字符串 arr_unicode np.array([你好, 世界], dtypeU10) print(arr_unicode.dtype) # U10数据类型操作1.查看和修改数据类型# 查看数据类型 arr np.array([1, 2, 3]) print(arr.dtype) # int64 (默认) # 修改数据类型创建新数组 arr_float arr.astype(np.float32) print(arr_float.dtype) # float32 print(arr_float) # [1. 2. 3.] # astype会创建新数组不会改变原数组 print(arr.dtype) # int642.创建时指定数据类型# 创建数组时指定dtype arr1 np.array([1, 2, 3], dtypenp.int16) arr2 np.array([1.0, 2.0, 3.0], dtypenp.float32) arr3 np.array([True, False], dtypebool)3.数据类型转换规则# 混合类型会自动提升 arr np.array([1, 2.5, 3]) # 包含整数和浮点数 print(arr.dtype) # float64 arr2 np.array([1, 23j, 3]) # 包含整数和复数 print(arr2.dtype) # complex128特殊数据类型1.结构化数据类型记录数组# 定义结构类型 dt np.dtype([ (name, U20), # 20字符的Unicode字符串 (age, i4), # 32位整数 (height, f8), # 64位浮点数 (weight, f8) ]) # 创建结构化数组 people np.array([ (Alice, 25, 1.65, 55.5), (Bob, 30, 1.80, 75.0), (Charlie, 35, 1.75, 80.2) ], dtypedt) print(people) # 输出: [(Alice, 25, 1.65, 55.5) (Bob, 30, 1.8 , 75. ) (Charlie, 35, 1.75, 80.2)] # 访问字段 print(people[name]) # [Alice Bob Charlie] print(people[age]) # [25 30 35] print(people[0]) # (Alice, 25, 1.65, 55.5) print(people[0][name]) # Alice2.日期时间类型# 日期时间 dates np.array([2024-01-01, 2024-01-02], dtypedatetime64[D]) print(dates.dtype) # datetime64[D] # 时间差 deltas np.array([1, 2, 3], dtypetimedelta64[D]) print(deltas.dtype) # timedelta64[D] # 运算 tomorrow dates[0] np.timedelta64(1, D) print(tomorrow) # 2024-01-02类型字符码NumPy 使用单字符代码表示数据类型这在某些函数中很常见字符对应类型b布尔型i有符号整数u无符号整数f浮点数c复数S/a字节字符串UUnicode字符串OPython对象M日期时间m时间差# 使用字符码 arr1 np.array([1, 2, 3], dtypei4) # 32位整数 arr2 np.array([1.0, 2.0], dtypef8) # 64位浮点数 arr3 np.array([a, b], dtypeU1) # 1字符Unicode数据类型信息arr np.array([1, 2, 3], dtypenp.int32) # 获取类型信息 print(arr.dtype) # int32 print(arr.dtype.name) # int32 print(arr.dtype.kind) # i (整数类型) print(arr.dtype.itemsize) # 4 (字节数) print(arr.dtype.type) # class numpy.int32 # 类型边界 print(np.iinfo(np.int32).min) # -2147483648 print(np.iinfo(np.int32).max) # 2147483647 print(np.finfo(np.float32).eps) # 机器精度内存优化技巧1.选择合适的数据类型# 不必要的大类型浪费内存 arr_bad np.ones((1000, 1000), dtypenp.float64) # 8MB arr_good np.ones((1000, 1000), dtypenp.float32) # 4MB (节省一半) # 对于布尔值使用bool类型 bool_arr np.array([True, False, True], dtypebool) # 1字节/元素2.查看内存使用arr np.ones((100, 100), dtypenp.float64) print(arr.nbytes) # 80000 字节 (100 * 100 * 8) print(arr.size * arr.itemsize) # 同样计算字节数总结同质性NumPy 数组所有元素类型必须相同明确指定创建数组时最好明确指定dtype避免意外类型提升内存意识选择满足需求的最小类型特别是处理大型数组时类型安全使用astype()进行显式转换注意精度损失灵活性结构化数组允许创建类似数据库表的复合数据类型NumPy 的类型系统是其高性能计算的基础理解并正确使用这些类型是有效使用 NumPy 的关键。❤️❤️❤️本人水平有限如有纰漏欢迎各位大佬评论批评指正如果觉得这篇文对你有帮助的话也请给个点赞、收藏下吧非常感谢! Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2457865.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!