Python-numpy

内容纲要

Scipy库简介

  • Scipy库是基于Python生态的一款开源数值计算、科学与工程应用的开源软件,主要包括NumPy、Scipy、pandas、matplotlib等等。
  • 官方文档:https://scipy.org/

numPy、Scipy、pandas、matplotlib简介

  • numpy——基础,以矩阵为基础的数学计算模块,纯数学存储和处理大型矩阵。 这个是很基础的扩展,其余的扩展都是以此为基础。
  • scipy——数值计算库,在numPy库的基础上增加了众多的数学、科学以及工程计算中常用的库函数。 方便、易于使用、专为科学和工程设计的Python工具包.它包括统计,优化,整合,线性代数模块,傅里叶变换,信号和图像处理,常微分方程求解器等等。
  • pandas——数据分析,基于numPy 的一种工具,为了解决数据分析任务而创建的.Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。
  • matplotlib——绘图,对于图像美化方面比较完善,可以自定义线条的颜色和式样,可以在一张绘图纸上绘制多张小图,也可在一张图上绘制多条线,可以很方便的对数据进行可视化分析。

NumPy模块

  • numPy:Numerical Python,即数值Python包,是Python进行科学计算的一个基础包,所以是一个掌握其他Scipy库中模块的基础模块,一定需要先掌握该包的主要使用方式。
  • 官网:http://www.numpy.org/
  • 官方文档:https://docs.scipy.org/doc/numpy/user/index.html
  • NumPy模块是Python的一种开源的数值计算扩展,是一个用python实现的科学计算包,主要包括:
    • 一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组,称为ndarray(N-dimensional array object)
    • 用于对整组数据进行快速运算的标准数学函数:ufunc(universal function object)
    • 实用的线性代数、傅里叶变换和随机数生成函数。
    • NumPy和稀疏矩阵的运算包Scipy配合使用更加方便。

NumPy核心数据结构:ndarray

  • NumPy的数组类被称作ndarray。通常被称作数组。注意numpy.array和标准Python库类array.array并不相同,后者只处理一维数组和提供少量功能。
  • 一种由相同类型的元素组成的多维数组,元素数量是实现给定好的
  • 元素的数据类型由dtype(data-type)对象来指定,每个ndarray只有一种dtype类型
  • ndarray的大小固定,创建好数组后数组大小是不会再发生改变的

创建数组

ndarray创建


- arange函数: 类似python的range函数,通过指定开始值、终值和步长来创建一个一维数组,注意:最终创建的数组不包含终值
- linspace函数:通过指定开始值、终值和元素个数来创建一个一维数组,数组的数据元素符合等差数列,可以通过endpoint关键字指定是否包含终值,默认包含终值
- logspace函数:和linspace函数类似,不过创建的是等比数列数组(base = n 可以修改底数 n为修改的值)
- 使用随机数填充数组,即使用numpy.random中的random()函数来创建0-1之间的随机元素,数组包含的元素数量由参数决定

ndarray其它创建方式

ndarray对象属性

  • ndim 数组轴(维度)的个数,轴的个数被称作秩
  • shape 数组的维度(可更改数组形状), 例如一个2排3列的矩阵,它的shape属性将是(2,3),这个元组的长度显然是秩,即维度或者ndim属性
  • size 数组元素的总个数,等于shape属性中元组元素的乘积。
  • dtype 一个用来描述数组中元素类型的对象,可以通过创造或指定dtype使用标准Python类型。不过NumPy提供它自己的数据类型。
  • itemsize 数组中每个元素的字节大小。例如,一个元素类型为float64的数组itemsiz属性值为8(=64/8),又如,一个元素类型为complex32的数组item属性为4(=32/8).

NumPy基本数据类型

  • 创建numpy数组的时候可以通过属性dtype显示指定数据类型,如果不指定的情况下,numpy会自动推断出适合的数据类型,所以一般不需要显示给定数据类型。
  • 如果需要更改一个已经存在的数组的数据类型,可以通过astype方法进行修改从而得到一个新数组。

  • 数值型dtype的命名方式为:一个类型名称(eg:int、float等),后接一个表示各个元素位长的数字
    • 比如Python的float数据类型(双精度浮点值),需要占用8个字节(64位),因此在NumPy中记为float64
    • 每个数据类型都有一个类型代码,即简写方式

ndarray修改形状

  • 对于一个已经存在的ndarray数组对象而言,可以通过修改形状相关的参数/方法从而改变数组的形状。
    • 直接修改数组ndarray的shape值, 要求修改后乘积不变。
    • 直接使用reshape函数创建一个改变尺寸的新数组,原数组的shape保持不变,但是新数组和原数组共享一个内存空间,也就是修改任何一个数组中的值都会对另外一个产生影响,另外要求新数组的元素个数和原数组一致。
  • 当指定某一个轴为-1的时候,表示将根据数组元素的数量自动计算该轴的长度值。

NumPy基本操作

  • 数组不用循环即可对每个元素执行批量的算术运算操作,这个过程叫做矢量化,即用数组表达式代替循环的做法。(矢量化,直接操作)
  • 矢量化数组运算性能比纯Python方式快上一两个数据级。(速度更快)

ndarray-数组的矩阵积(矩阵点乘)

arr1.dot(arr2)
np.dot(arr1,arr2)

ndarray-多维数组的索引

根据二维数组的索引去值(C语言普通数组)

切片


ndarray-花式索引

  • 花式索引(Fancy indexing)指的是利用整数数组进行索引的方式。

ndarray-布尔类型索引


ndarray-数组转置与轴对换

  • 数组转置是指将shape进行重置操作,并将其值重置为原始shape元组的倒置,比如原始的shape值为:(2,3,4),那么转置后的新元组的shape的值为: (4,3,2)f
  • 对于二维数组而言(矩阵)数组的转置其实就是矩阵的转置
  • 可以通过调用数组的transpose函数或者T属性进行数组转置操作

ndarray-通用函数/常用函数

  • ufunc:numpy模块中对ndarray中数据进行快速元素级运算的函数,也可以看做是简单的函数(接受一个或多个标量值,并产生一个或多个标量值)的矢量化包装器。

ndarray-通用函数/常用函数

一元函数


二次函数

ndarray-聚合函数

  • 聚合函数是对一组值(eg一个数组)进行操作,返回一个单一值作为结果的函数。当然聚合函数也可以指定对某个具体的轴进行数据聚合操作;常将的聚合操作有:平均值、最大值、最小值、方差等等

np.where函数

  • np.where函数是三元表达式x if condition else y的矢量化版本

np.unique函数(去重操作)

THE END
分享
二维码
< <上一篇
下一篇>>