Python-NumPy基础

第二章 Numpy基础

2.1 Numpy 简介

​ NumPy(Numerical Python)是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库

  • 一个强大的N 维数组对象 ndarray
  • 广播功能函数
  • 整合 C/C++/Fortran 代码的工具
  • 线性代数、傅里叶变换、随机数生成等功能

为什么要使用NumPy?

  • numpy 的数组功能比Python 自身的嵌套列表(nested list structure)结构要高效得多(该结构也可以用来表示矩阵(matrix)),支持大量得维度数组与矩阵运算,此外也针对数组运算提供大量得数学函数库

NumPy模块导入:

  • import numpy as np
  • from numpy import*

NumPy支持得数据类型

类型描述
bool用一位存储的布尔类型(值为TRUE或FALSE)
int由所在平台决定其精度的整数(一般为int32或int64)
float浮点数,根据精度显示不同的长度
str字符串数据

2.2 Numpy 数组创建及存储

2.2.1 数组函数

​ 创建数组通常使用array函数

array函数详解:

  • numpy.array(object,dtype=None,copy=True,order='K',subok=False,ndmin=0)
    • object:接收array。表示想要创建的数组。无默认
    • dtype:接收data-type。表示数组所需的数据类型。如果未给定,则选择保存对象所需的最小类型。默认为None
    • ndmin:接收int。指定生成数组应该应该具有的最小维度。默认为None

查看数组的基本信息

函数描述
size数组的大小
ndim数组最大维度
shape数组的形状
dtype数据类型
2.2.2 数组生成函数

arange函数

  • numpy.arange(start,stop,step,dtype=None)
    • start:起始值。可忽略不写,默认从0开始
    • stop:结束值。生成的元素不包括结束值
    • step:步长。可忽略不写,默认步长为1
    • dtype:设置显示元素的数据类型,默认为None

linspace 和 logspace 函数

  • numpy.linspace(start,stop,,num=50,endpoint=True,retstep=False,dtype=None,axis=0)
  • numpy.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None,axis=0)
    • endpoint:True 则包括stop;false 则不包含stop
    • retstep:如果为True,则结果会给出数据间隔
    • base:函数的底
2.2.3 简便的数组生成函数
函数名描述
ones根据给定形状和数据类型生成全1数组
ones_like根据所给的数组生成一个形状一样的全1数组
zeros根据给定形状和数据类型生成全0数组
zeros_like根据所给的数组生成一个形状一样的全0数组
empty根据给定形状生成一个没有初始化的空数组
empty_like根据所给的数组生成一个形状一样但没有初始化数值的空数组
full根据给定形状和数据类型生成指定数值的数组
full_like根据所给的数组生成一个形状一样但内容是指定数值的数组
eye,identity生成一个N×N特征矩阵(对角线是1,其他是0)
diag将一个方针对角元素作为一维数组返回,或者将一位数组转换成一个方针,并在非对角线上有零点
2.2.4 随机数模块

numpy.random模块填补了Python内建的random模块的不足,可以搞笑生成随机数组

  • numpy.random.randiant(low,high=None,size=None,dtype='l')
    • low:生成的数值最低要大于等于low,(high = None时,生成的数值要在[0,low)区间内)
    • high:如果使用这个值,则生成的数值在[low,high)区间
    • size:输出随机数的尺寸,比如size=(m * n * k) 则输出同规模即m * n * k个随机数。默认是None的,仅仅返回满足要求的单一随机数

无约束条件下生成随机数

  • np.random.random(n)
    • 生成n个(0,1)之间服从均匀分布的随机数,数据类型为float
  • np.random.random((m,n))
    • 生成m维,每个数组n个(0,1)之间服从均匀分布的随机数,数据类型为float

Numpy随机数

函数描述
random无约束条件下生成随机数
rand从均匀分布中抽取样本
randn从均值0方差1的正态分布中抽取样本
binomial产生二项分布的随机数
normal产生正态(高斯)分布的随机数
beta产生beta分布的随机数
chisquare产生卡方分布的随机数
gamma产生gamma分布的随机数
uniform产生[0,1)中均匀分布的随机数
seed确定随机数生成器的种子
permutation返回一个序列的随机排序或返回一个随机排序的范围
shuffle对一个序列进行随机排序
2.2.5 Numpy 数据的读写

NumPy文件读写主要有二进制的文件读写和文件列表形式的数据读写两种形式

  • np.save("../tmp/save_arr",arr) //以二进制格式保存数据
  • np.load("../tmp/save_arr.npy") //从二进制文件中读取数据
  • np.savez('../tmp/savez_arr',arr1,arr2) //将多个数组保存到一个文件中

读取文本格式的数据

  • np.savetxt("../tmp/arr.txt",arr,fmt="%d",delimiter=",") //将数组写到某种分隔符隔开的文本文件中
  • np.loadtxt("../tmp/arr.txt",delimiter=",") //把文件加载到一个二维数组中
  • np.genfromtxt("../tmp/arr.txt",delimiter=",") //genfromtxt函数面向的是结构化数组和缺失数据

2.3 Numpy 数组操作

2.3.1 数组索引与切片

一维数组

操作描述
arr[j]单个元素
arr[j1:j2]连续多个元素
arr[[j1,j2,j3]]分散取多个元素
arr[j1:j2:t]正向步长取值(j1 < j2)
arr[j1:j2:-t]反向步长取值(j1 > j2)
arr[-1]从末尾索引。正向检索规则同样适用负向

多维数组

操作描述
arr[i,j]单个元素
arr[i,j1:j2]连续多个元素
arr[i,[j1,j2,j3]]分散取多个元素
arr[j1:j2:t]正向步长取值(j1 < j2)
arr[j1:j2:-t]反向步长取值(j1 > j2)
arr[i,:]整列操作
arr[:,i]整行操作
2.3.2 布尔数组

​ 对两个任意形状大小的数组进行比较运算可以获得一个相同形状的布尔数组

根据布尔值的特性,可以对布尔数组做多种操作

函数描述
sum返回所有元素的和
any检验数组中有没有true,如果有一个true,则返回true
all检验数组是不是全都是true,只有在全都是true的情况下才返回true

利用布尔数组切片

​ 布尔索引是把数组中布尔值为True的相应行、列或者元素抽取了出来(注意:布尔值的长度必须和想要切片的维度或轴的长度一致)

一维数组

​ 一维数组中的每个元素的布尔型数值对一个与一维数组有着同样行数或列数的数组进行符合匹配

多维数组

​ 提取行列:将行(列)对应布尔值进行符合匹配
​ 提取元素:将需要提取的元素对应的布尔值数组匹配提取即可。提取后的结果返回一个一维数组

2.3.3 Numpy 数组计算

​ NumPy可以直接进行算术操作,比如两个数组相加可以直接使用arr1 + arr2,两个数组对应元素相乘可以直接使用arr1 * arr2

​ 此外,数组还可以调用通用函数(又称ufunc,一种在数组中进行逐元组操作的函数)实现更高级的功能

一元通用函数

函数描述
abs/fabs逐元素地计算整数,浮点数或复数的绝对值
sqrt计算每个元素的平方
square计算每个元素的平方根
exp计算每个元素的自然指数值
log,log2自然对数,对数2为底
sign计算每个元素的符号值(1:正,0:0,-1:负)
ceil计算每个元素的最高整数值
floor计算每个元素的最小整数值
rint将元素保留到整数部,并保持dtype
modf分别返回整数和小数部分的数组
isnan返回数组中的元素是否是一个NaN(布尔)
cos/sin/tan/cosh/sinh/tanh/arccos/arcsin/arctan三角函数:余弦、正弦、正切、双曲余弦、双曲正弦、双曲正切、反余弦、反正弦、反正切
logical_not对数组的元素按位取反

二元通用函数

函数描述
add将数组的对应元素相加
subtract在第二个数组中,将第一个数组中包含的元素去除
multiply将数组的对应元素相乘
divide/floor_divide除或整除(放弃余数)
power将第二个数组的元素作为第一个数组的幂次方
maximum/fmax逐个元素计算最大值,fmax忽略NaN
minimum/fmin逐个元素计算最大值,fmin忽略NaN
mod按元素的求模计算
2.3.4 广播规则

NumPy的广播遵循一组严格的规则,设定这组规则是为了对不同形状的数组进行操作

  • 规则1:如果两个数组的维度数不相同,那么小维度数组的形状将会在最左边补1
  • 规则2:如果两个数组的形状在任何一个维度上都不匹配,那么数组的形状会沿着维度为1的维度扩展以匹配另一个数组的形状
  • 规则3:如果两个数组的形状在任何一个维度上都不匹配并且没有任何一个维度等于1,那么会引发异常
2.3.5 NumPy排序与唯一值

NumPy可以使用sort方法按照位置进行排序

直接排序

  • numpy.sort(arr) //最常用的排序方法,不支持反向排序
  • numpy.sort(arr,axis) //也可以指定一个axis 参数,使得sort函数可以沿着指定轴对数据集进行排序。axis=1为沿着横轴排序;axis=0为沿着纵轴排序

间接排序

  • numpy.argsort(arr) //返回值为重新排序值的下标
  • numpy.lexsort((a,b,c)) //返回值是按照最后一个传入的数据排序的
2.3.6 NumPy 去重与重复数据

去重

  • 通过unique函数可以找出数组中的唯一值并返回

重复

  • np.tile(A,reps) //tile函数主要有两个参数,参数A指定重复的数组,参数reps指定重复的次数
  • np.repeat(a,repeats,axis=None) //repeat函数主要有三个参数,参数a是需要重复的数组元素,参数repeats是重复次数,参数axis指定沿着哪个轴进行重复,axis = 0表示按行进行元素重复;axis = 1表示按列进行元素重复。
  • 这两个函数的主要区别在于,tile函数是对数组进行重复操作,repeat函数是对数组中的每个元素进行重复操作。
2.3.7 NumPy统计函数

​ 使用聚合函数可以直接对数组进行计算,当axis=0时,表示沿着纵轴计算。当axis=1时,表示沿着横轴计算。默认时计算一个总值

函数说明
sum计算数组的和
mean计算数组均值
std计算数组标准差
var计算数组方差
min计算数组最小值
max计算数组最大值
argmin返回数组最小元素的索引
argmax返回数组最大元素的索引
cumsum计算所有元素的累积和
cumprod计算所有元素的累积积
2.3.8 通过函数改变数组的形状

改变数组的形状

  • numpy.reshape(arr,newshape)
  • arr.resahpe(newshape)
  • numpy.expand_dims(dim_index) //在指定维度上增加一个维度

展平数组

  • arr.ravel()
  • arr.flatten()
  • arr.flatten('F') //按列展开
效果方向函数
组合横向hstack((arr1,arr2))、concatenate((arr1,arr2),axis = 1))
纵向vstack((arr1,arr2)) 、concatenate((arr1,arr2),axis = 0))
分割横向vsplit(arr, n)、split(arr, n, axis=0)
纵向hsplit(arr, n)、split(arr, n, axis=1)

2.4 Numpy 线性代数

2.4.1 矩阵计算
操作功能
matr1 * n矩阵与数相乘
matr1 +/- matr2矩阵相加减
matr1 * matr2矩阵相乘
numpy.multiply(matr1,matr2)矩阵对应元素相乘

矩阵特有属性:

属性说明
T返回自身的转置
H返回自身的共轭转置
I返回自身的逆矩阵
A返回自身数据的二维数组的一个视图
2.4.2 线性函数

​ 线性代数,比如矩阵乘法、分解、行列式等方阵数学,是所有数组类库的重要组成部分。numpy的linalg拥有一个矩阵分解的标准函数集

函数描述
dot矩阵点乘
trace计算对角元素和
det计算矩阵行列式
eig计算方阵的特征值和特征向量
inv计算方阵的逆矩阵
qr计算矩阵的QR分解
svd计算矩阵的奇异值分解
solve求解x的线性系统Ax=B,其中A时矩阵
lstsq就按Ax=B的最小二乘解
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三月江东

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值