【Python】Numpy库入门及基础操作

NumPy入门及基本操作

NumPy是一个开源的Python科学计算基础库,可以用import numpy as np引入,通常简写为np。
NumPy的特色是多维数组对象:ndarray,由实际的数据和描述这些数据的元数据构成。ndarray数组一般要求所有元素类型相同(同质),数组下标从0开始。ndarray数据类型具有众多有点。数组对象可以去掉元素间运算所需的循环,使一维向量更像单个数据。通过设置专门的数组对象,经过优化,可以提升这类应用的运算速度。数组对象采用相同的数据类型,有利于节省运算和存储空间。非同质ndarray元素为对象类型无法有效发挥NumPy优势,尽量避免使用。

ndarray数组的属性

轴(axis):保存数据的维度
秩(rank):轴的数量

属性说明
.ndim秩,即轴的数量或维度的数量
.shapendarray对象的尺度,对于矩阵n行m列
.sizendarray对象元素的个数,相当于.shape中n×m的值
.dtypendarray对象的元素类型
.itemsizendarray对象中每个元素的大小,以字节为单位

ndarray数组的创建

  1. 从Python中的列表、元组等类型创建ndarray数组
# 从列表类型创建
x = np.array([0, 1, 2, 3])
# 从元组类型创建
x = np.array((0, 1, 2, 3))
# 从列表和元组混合类型创建
x = np.array([[1, 2], [9, 8], (0.1, 0.2)])
  1. 使用NumPy中函数创建ndarray数组,如arrange, ones, zeros等
# 生成从0到10的一维数组,默认整数类型
x = np.arange(10)
# 生成3行6列的全1数组,默认浮点数类型
x = np.ones((3, 6))
# 生成3行6列的全0数组,指定整数类型
x = np.zeros((3, 6), dtype=np.int32)
# 生成5×5的单位矩阵,默认浮点数类型
x = np.eyes(5)
# 根据数组x的形状生成一个全0数组
y = np.zeros_like(x)
# 根据数组x的形状生成一个全1数组
y = np.ones_like(x)
# 根据数组x的形状生成一个全2数组
y = np.full_like(x, 2)
  1. 使用NumPy中其他函数创建ndarray数组
# 根据起止数据等间距地填充4个数据,默认浮点数类型
x = np.linspace(1, 10, 4, endpoint=False)
# 将两个或多个数组合并成一个新的数组
z = np.concatenate((a, b))

ndarray数组的变换

  1. ndarray数组的维度变换
# 返回一个(3, 8)形状的数组,reshape不改变原数组而resize改变原数组
x = np.ones((2, 3, 4), dtype=np.int32)
y = x.reshape((3, 8))
x.resize((3, 8))
# 将数组降维得到一维数组,不改变原数组
y = x.flatten()
  1. ndarray数组的类型变换
# 改变数组类型,不改变原数组
y = x.astype(np.float)
  1. ndarray数组向列表的转换
# ndarray数组转化为列表,改变原数组
x.tolist()

ndarray数组的索引和切片

索引:获取数组中特定位置元素的过程
切片:获取数组元素子集的过程

  1. 一维数组的索引和切片
x = np.array([9, 8, 7, 6, 5])
# 索引同列表
y = x[2]  # 7
# 切片[起始编号:终止编号(不含):步长]
y = x[1:4:2]  # array([8, 6])
  1. 多维数组的索引和切片
x = np.arange(24).reshape((2, 3, 4))
'''
array([[[ 0  1  2  3]
  		[ 4  5  6  7]
  		[ 8  9 10 11]]

 	   [[12 13 14 15]
  		[16 17 18 19]
  		[20 21 22 23]]])
'''
# 索引
y = x[1, 2, 3]  # 23
y = x[0, 1, 2]  # 6
y = x[-1, -2, -3]  # 17
# 切片
y = x[:, 1, -3]  # array([5, 17])
# 指定第二个维度的元素1至3(不含)
y = x[:, 1:3, :]
'''
array([[[ 4  5  6  7]
  		[ 8  9 10 11]]

 	   [[16 17 18 19]
  		[20 21 22 23]]])
'''
# 指定第三个维度的步长为2
y = x[:, :, ::2]
'''
array([[[ 0  2]
  		[ 4  6]
  		[ 8 10]]

 	   [[12 14]
  		[16 18]
  		[20 22]]])
'''

ndarray数组的运算

  1. 数组与标量之间的运算
    数组与标量之间的运算作用于数组的每一个元素。
x = np.arange(24).reshape((2, 3, 4))
x = x / x.mean()  # 计算x与元素平均值的商
  1. NumPy一元函数的运算
函数说明
np.abs(x) np.fabs(s)绝对值
np.sqrt平方根
np.square平方
np.log(x) np.log10(x) np.log2(x)自然对数、10底对数和2底对数
np.ceil(x) np.floor(x)ceiling值或floor值
np.rint(x)四舍五入值
np.cos(x) np.sin(x) np.tan(x)三角函数值
np.exp(x)指数值
np.sign(x)符号值(-1(+),0,1(-))
  1. NumPy二元函数的运算
函数说明
+ - * /加减乘除
np.maximum(x,y) np.minimum(x,y)元素级最大最小值
np.mod(x,y)元素级模运算
np.copysign(x,y)将数组y中各元素值的符号赋值给数组x对应元素
> < >= <= == !=算术比较返回布尔型数组

数据的文件存取

csv文件

  1. 写入np.savetxt(frame, array, fmt='%.18e', delimiter=None)
    frame:通常为文件路径字符串,也可以是文件、产生器或.gz/.bz2的压缩文件
    array:存入文件的数组
    fmt:写入文件的格式,如%d/%.2f/%.18e等
    delimiter:分割字符串,默认是任何空格
x = np.arange(100).reshape(5, 20)
np.savetxt('x.csv', x, fmt='%d', delimiter=',')
  1. 读取np.loadtxt(frame, dtype=np.float, delimiter=None, unpack=False)
    frame:通常为文件路径字符串,也可以是文件、产生器或.gz/.bz2的压缩文件
    dtype:数据类型,默认浮点型
    delimiter:分割字符串,默认是任何空格
    unpack:如果True,读入属性将分别写入不同变量
x = np.loadtxt('x.csv', delimiter=',')

dat文件

  1. 写入a.tofile(frame, sep=' ', format='%s')
    frame:通常为文件路径字符串,也可以是文件、产生器或.gz/.bz2的压缩文件
    sep:数据分割字符串,如果是空串,写入文件为二进制
    format:写入文件的格式
x = np.arange(100).reshape(5, 20, 2)
x.tofile('x.dat', sep=',', format='%d')
  1. 读取np.fromfile(frame, dtype=float, count=-1, sep=' ')
    frame:通常为文件路径字符串,也可以是文件、产生器或.gz/.bz2的压缩文件
    dtype:数据类型,默认浮点型
    count:读入元素个数,-1表示读入整个文件
    sep:数据分割字符串,如果是空串,写入文件为二进制
x = np.fromfile('x.dat', dtype=np.int, sep=',').reshape(5, 10, 2)

npy文件

写入np.save(fname, array)np.savez(fname, array)
读取np.load(fname)

x = np.arange(100).reshape(5, 20, 2)
np.save('x.npy', x)
y = np.load('x.npy')

NumPy中的随机数

函数说明
rand(d0, d1, …, dn)创建随机数数组,浮点数[0,1)均匀分布
randn(d0, d1, …, dn)创建随机数数组,标准正态分布
randint(low[, high, shape])创建随机整数或整数数组,范围是[low, high)
seed(s)创建随机数数组,标准正态分布
shuffle(a)根据数组a的第1轴进行行随机排列,改变原数组
permutation(a)根据数组a的第1轴产生一个新的乱序数组,不改变原数组
choice(a[, size, replace, p])从一维数组a中以概率p抽取元素,形成size形状新数组,replace表示元素是否重用,默认不重用
uniform(low, high, size)产生具有均匀分布的数组,low起始值,high结束值,size形状
normal(loc, scale, size)产生具有正态分布的数组,loc均值,scale标准差,size形状
poisson(lam, size)产生具有泊松分布的数组,lam随机事件发生率,size形状

NumPy的统计函数

函数说明
sum(a, axis=None)元素的和(根据给定轴axis)
mean(a, axis=None)元素的期望
average(a, axis=None, weight=None)元素的加权平均值
std(a, axis=None)元素的标准差
var(a, axis=None)元素的方差
min(a) max(a)元素的最小最大值
argmin(a) argmax(a)元素最小最大值的降一维后下表
unravel_index(index, shape)将一维下标转换成多维下标
ptp(a)元素最大与最小值的差
median(a)元素的中位数

NumPy的梯度函数

函数说明
np.gradient(a)计算数组a中元素的梯度,当a为多维时返回每个维度的梯度

注:梯度是指连续值之间的变化率,即斜率。


Reference:
https://www.icourse163.org/learn/BIT-1001870002?tid=1450349444#/learn/announce

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值