《利用Python进行数据分析》学习笔记 NumPy高级应用

本文深入探讨了NumPy的ndarray对象内部机理,包括数据块的跨度视图、数据类型体系以及高级数组操作,如重塑和步幅调整。通过理解ndarray的内部结构,读者将掌握高效操作多维数组的技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

附录A NumPy高级应用

A.1 ndarray对象的内部机理

NumPy的ndarray提供了一种将同质数据块(可以是连续或跨越)解释为多维数组对象的方式。数据类型(dtype)决定了数据的解释方式,比如浮点数、整数、布尔值等。

ndarray如此强大的部分原因是所有数组对象都是数据块的一个跨度视图(strided view)。

ndarray不只是一块内存和一个dtype,它还有跨度信息,这使得数组能以各种步幅(step size)在内存中移动。更准确地讲,ndarray内部由以下内容组成:

  1. 一个指向数据(内存或内存映射文件中的一块数据)的指针。
  2. 数据类型或dtype,描述在数组中的固定大小值的格子。
  3. 一个表示数组形状(shape)的元组。
  4. 一个跨度元组(stride),其中的整数指的是为了前进到当前维度下一个元素需要“跨过”的字节数。

ndarray的内部结构: 

一个典型的(C顺序,稍后将详细讲解)3×4×5的float64(8个字节)数组,其跨度为(160,40,8)。通常,跨度在一个轴上越大,沿这个轴进行计算的开销就越大:a

跨度可以是负数,这样会使数组在内存中后向移动,比如在切片obj[::-1]或obj[:,::-1]

  • NumPy数据类型体系

有时需要检查数组中所包含的是否是整数、浮点数、字符串或Python对象。因为浮点数的种类很多(从float16到float128),判断dtype是否属于某个大类的工作非常繁琐。dtype都有一个超类(比如np.integer和np.floating),它们可以跟np.issubdtype函数结合使用:

调用dtype的mro方法即可查看其所有的父类: 

然后得到: 

NumPy的dtype体系以及父子类关系 

A.2 高级数组操作

  • 数组重塑

向数组的实例方法reshape传入一个表示新形状的元组即可将数组从一个形状转换为另一个形状。

按C顺序(按行)和按Fortran顺序(按列)进行重塑

作为参数的形状的其中一维可以是-1,它表示该维度的大小由数据本身推断而来: 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值