python机器学习基础--numpy库

本文介绍了NumPy库的基础知识,包括一维、二维和多维数组的概念,以及ndarray对象的特点和属性。讲解了如何使用numpy创建和变换数组,如arange、ones、zeros等函数,以及reshape、resize等操作。还探讨了数组操作,如索引、切片和数组运算,并展示了随机数生成和统计函数的使用。最后,文章讨论了numpy在csv文件存储和读取方面的应用,以及随机数和统计计算的实例。
摘要由CSDN通过智能技术生成

numpy库

开源的科学计算基础库
本篇文章参考中国大学MOOC嵩天老师的课程:python数据分析与展示

数据维度的python表示

一维数组
在这里插入图片描述

二维数据
在这里插入图片描述

多维数据
在这里插入图片描述

高维数据
在这里插入图片描述

数组对象ndarray

数据对象特点

  1. 数组对象可以去掉元素间运算所需的循环,使一维向量更像单个数据
  2. 设置专门的数组对象,可以提升这类应用的运算速度
  3. 数组采用相同的数据类型,有利于节省运算和储存空间

关于ndarray

  1. ndarray是一个多维数组对象,由两部分构成
    (1)实际的数据
    (2)描述这些数据的元数据(数据维度、数据类型等等)
  2. ndarray数组要求所有数据类型相同,数据下标从0开始
  3. 在程序中,ndarray的别名是array
  4. np.array()将数组输出为[ ]形式,元素之间由空格分开
    轴(axis)用于保存数据的维度
    秩(rank)轴的数量

ndarray对象的属性

属性描述
.ndim
.shape对象的形状,对应矩阵的n行m列
.size对象元素的个数
.dtype对象中元素类型
.itemsize对象中每个元素的大小,以字节为单位

ndarray对象的意义

  1. 去掉元素间运算所需的循环,使得一维向量更像单个数据
  2. 数组对象采用相同的数据类型,有助于节省运算和存储空间

数组创建与变换

创建方法

  1. 利用列表、元组等类型创建ndarray

在这里插入图片描述

  1. 使用numpy中的函数创建
函数描述
numpy.arange(n)返回ndarray类型,元素从0到1
ones(shape)生成一个全1的数组,
zeros(shape)生成一个全0的数组
full(shape,val)根据shape生成一个数组,每个元素都是val
eye(n)生成一个正方n*n的单位矩阵,对角线为1,其余为0
ones_like(a)根据a的形状生成一个全1的数组
zeros_like(a)根据a的形状生成一个全0的数组
full_like(a,val)根据a的形状生成一个每个元素都是val的数组

在这里插入图片描述

  1. 其他方法创建
函数描述
linspace()根据起止数据等间距填充数据形成数组
concatenate()将两个或多个数组合并成一个新的数组
在这里插入图片描述

数组变换

对于创建后的数组进行维度变换或元素类型变换
维度变换

方法描述
reshape(shape)不改变数组元素,返回一个shape形状的数组,不改变原数组
resize(shape)与reshape功能相同,改变原数组
swapaxes(ax1,ax2)将数组两个维度调换
flatten()对数组降维,返回折叠后的一维数组,原数组不变
下面我们来看看这些方法的作用

在这里插入图片描述

类型转换

函数描述
.astype(newtype)创建新的数组,数据相同,类型也可能相同
.tolist()数组向列表转换
从下面的例子中我们可以看出,转换数组元素的类型时并未改变原数组,此外,如果参数newtype使用numpy中的数据类型时未知名精度,程序会提出警告
在这里插入图片描述
下面我们生成一个列表
数组转换为列表

数组操作

索引和切片
一维数组索引
在这里插入图片描述
多维数组索引
在这里插入图片描述

多维数组切片
在这里插入图片描述

数组运算

数组与标量之间的运算

数组中的每一个元素参与运算
在这里插入图片描述

一元函数
对数组中的数据执行元素级运算

函数描述
np.abs(x) /np.fabs(x)求数组x各元素的绝对值
np.sprt(x)求数组x中各元素平方根
np.square(x)各元素平方
np.logn(x)(n为底数)求各元素对数值
np.ceil(x)求各元素ceiling值
np.rint(x)各元素四舍五入的值
np.modf(x)将各元素小数部分和整数部分分为两个独立的数组返回
np.sin()/cos()…各元素的三角函数值
np.exp(x)各元素指数值
np.sign(x)各元素符号值,-1(-),0,1(+)

在这里插入图片描述

二元函数
两个数组之间的元素运算

函数描述
+、-、*、/、**两个数组各元素对应进行运算
np.copysign(x,y)将y中各元素符号赋值给数组x对应的元素
<、>、<=、>=、!=、==算术比较,产生布尔类型
np.mod(x,y)元素级模运算
在这里插入图片描述

numpy数据存取

csv文件存储

语法格式:np.savetxt(frame,array,format,delimiter)

参数描述
frame文件(可以是压缩文件),字符串或产生器
array存入文件的数组
format写入文件的格式,如%d,%f
delimiter分割字符串,默认空格
案例1:使用下面代码生成一个csv文件1

在这里插入图片描述

打开文件我们可以看到里面的数据
在这里插入图片描述

csv文件读取

语法格式[^2]:np.loadtxt(frame,dtype,delimiter,unpack)

参数描述
frame文件(可以为压缩文件),字符串或产生器
dtype数据类型
delimiter分割字符串
unpack为True时,读入变量被写入不同属性
[^2]:注意:
1, csv只能有效存储一维和二维数据
2, np中的存储和读取函数都只能有效存储一维和二维数据
案例2:使用loadtxt()函数读取一个csv文件

在这里插入图片描述

多维数据存取

多维数据存储
语法格式:array.tofile(frame,sep,format)

参数名描述
frame文件,字符串
seq分割字符串
format写入文件的数据格式,如%d

多维数据读取
语法格式:np.fromfile(frame,dtype,count,sep)

参数描述
frame文件,字符串
dtype读取数据类型
count读入元素个数
sep数据分割字符串
这种方法存取时需要知道存入文件时数组的维度和元素类型[^3]
[^3]:多维数据存储(tofile()函数)和读取方法(fromfile()函数)需要配合使用,可以通过元数据文件来存储额外信息
案例3:存储并读取一个包含维数据的文件

在这里插入图片描述

随机数函数

np.random的随机数函数

函数描述
rand(d0,d1,…dn)根据d0-dn创建随机数数组,浮点数,范围[0,1),均匀分布
randn(d0,d1…dn)根据d0-dn创建随机数函数,正态分布
ranint(low,high,shape)根据shape创建随机整数,范围为(low,high)
seed(s)随机数种子s
shuffle(a)根据数组第一个轴随机排列,改变原数组
permutation(a)根据数组第一个轴随机排列,不改变原数组
choice(a[,size,replace,p])从一维数组中以概率p抽取元素,形成size形状的新数组,replace代表是否可以重用元素,默认Flase
uniform(low,high,size)产生具有均匀分布的数组,范围(low,high),size代表形状
normal(loc,scale,size)产生具有正态分布的数组,loc代表均值,scale代表标准差,size代表形状
poisson(lam,size)产生具有泊松分布的数组,lam代表随机事件发生率,size代表形状
案例4:使用随机数函数生成随机数组

在这里插入图片描述
下面我们对生成的数组进行变化

在这里插入图片描述
下面我们分别生成具有均匀分布和正态分布特征的数组
在这里插入图片描述

统计函数

函数描述
sum(a,axis)根据axis 计算数组a中相关元素之和
mean(a,axis)根据axis计算数组a相关元素期望
average(a,axis,weights)根据axis计算数组a相关元素加权平均值
std(a,axis)根据axis计算数组a相关元素标准差
var(a,axis)根据axis计算数组a相关元素方差
min(a)/max(a)计算数组中的最小/最大元素
argmin(a)/argmax(a)数组中最小/最大元素降一维对应的下标
unravel_index(index,shape)将一维坐标转换为多维shape状
ptp(a)数组中最小和最大元素数值之差
median(a)数组中元素的中位数
案例5:使用统计函数进行计算

在这里插入图片描述
下面我们尝试获得数组中的最小和最大值
在这里插入图片描述

梯度函数

函数描述
np.gradient(f)计算数组f中元素的梯度,当f为多维,返回每个维度的梯度1
1:梯度是连续值之间的变化率,即斜率
案例6:梯度函数小测

在这里插入图片描述


  1. 注意因为我们要将生成的数据保存为csv的表格形式,所以在设置表格的shape切不可大于二维,否则将报错:‘Expected 1D or 2D array, got 3D array instead’ ↩︎ ↩︎ ↩︎

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

夺笋123

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

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

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

打赏作者

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

抵扣说明:

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

余额充值