《利用Python 进行数据分析 第二版》 -第4章 NumPy基础:数组与向量化计算

本章重点内容:

1、NumPy ndarray:多维数组对象

  1)生成ndarry

  2)ndarray的数据类型

  3)NumPy数据算术

  4)基础索引与切片

  5)布尔索引

  6)数组转置和换轴

2、通用函数:快速的逐元素数组函数

3、使用数组进行面向数组编程

4、使用数组进行文件输入和输出

5、伪随机数生成

6、示例:随机漫步

接下来展开详细说明,如下

1、NumPy ndarray:多维数组对象

NumPy,是Numerical Python的简称,它是目前Python数值计算中最为重要的基础包,大多数计算包都提供了基于NumPy的科学函数功能,将NumPy的数组对象作为数据交换的通用语

首先看下NumPy的简单使用,如下:

 导入numpy进行使用,随机生成2行3列数字,然后可以进行一些数学操作,例如相乘、相加,如下:

 一个ndarray是一个通用的多维同类数据容器,每个数组都有一个shape属性,表示纬度的数量,都有一个dtype属性,表示数据类型,如下:

 1)生成ndarry

最简单的就是使用array函数,可以将不同的列表转换为数组,如下:

 一般来说,针对同等长度的列表,会自动转换为多维数组,

可以通过arange生成数组,类似Python中的range,如下

 2)ndarray的数据类型

前面我们说过,每个数组都会有一个数据类型的属性,在创建数组时,可以声明不同的数据类型,如下:

 可以使用astype方法显示的转换数组的数据类型,如下:

 如果字符串表示数字的含义,也可以通过astype转换成数字,如下:

 3)NumPy数据算术

数组之所以重要事因为他允许进行批量操作而无需任何for循环,在NumPy中,这个特性成为向量化,算术操作都会针对数组逐个元素进行,如下:

 两个数组间也可以进行比较,会产生一个布尔值数组,如下:

 4)基础索引与切片

一维数组的索引和切片,和Python中的列表相似,如下:

 有一个特别要区别的地方,就是数组的切片是原数组的视图,不是复制数据,所以对切片的修改都会反应到原数组上

可以针对二维及更多纬度的数组进行切片,如下,二维数组示例:

 可以进行更多纬度更灵活的切片,如下:

 5)布尔索引

假如我们有两个数组,一个数组是名字,另一个名字数组是数据,每个名字对应另一个数组中对应每行的数据,可以通过布尔索引相关数据,代码示例如下:

首先,创建一个名字的数组,然后随机产生对应的数据,如下:

 可以直接对数据进行比较操作,如下:

 在索引数组时可以传入布尔数组,如下:

 可以选择除bob之外的数据,如下:

 其中符合【~】表示取反的意思

6)数组转置和换轴

转置是一种特殊的数据重组形式,可以通过transpose方法和特殊的T属性实现,如下:

 在计算矩阵内积的时候,会用到转置,计算内积的方法是【.dot】,代码示例如下:

 2、通用函数:快速的逐元素数组函数

这里的通用函数,是指对一个数组或者多个数组进行的函数运算,例如取根号,最大值比较,具体代码示例如下:

 3、使用数组进行面向数组编程

将条件逻辑作为数组操作

numpy.where函数是三元表达式【x if condition else y】的向量化版本

如果有一个布尔数组和两个数值数组,根据布尔数组来选择另外两个数组,用该办法操作如下:

 可以对一个数组内符合条件的内容进行替换操作,如下:

 数学和统计方法

对数组内数据就和以及求均值,都可以很方便的实现,如下:

 排序

数组也可是使用sort方法进行位置排序,如下:

 针对多维数组,可以指定轴向进行排序,如下:

 唯一值

可以通过nuique方法计算数组内的唯一值,去除重复的内容,例如前面中提到的姓名的数组,具体代码示例如下:

 4、使用数组进行文件输入和输出

通过save和load方法来进行存取操作,具体代码示例如下:

存入数据:文件格式会默认为npy

 读取数据:一定要写出后缀

5、伪随机数生成

前面的示例中已经看到和用到来random的函数,来随机生产数据,他也可以高效多种概率分布下的完整样本值数组,例如使用normal获得4X4正态分布样本数组,如下:

 6、示例:随机漫步

原文地址:https://www.cnblogs.com/zhangjiyou/p/13379105.html