NumPy学习(python数据分析学习课) 第一周

单元 一

一、数组的索引和切片

  1. Numpy简介
  • np.array([]) 补充了python中没有数组的缺陷
  • numpy低层是C语言,支持多维数据整体操作
  • numpy中支持多种形式的数据,以及复数,如int32, float64,等
  • nd.array 数组可以由非同质的对象构成,非同质ndarray元素为对象类型,非同质ndarray对象无法有效发挥NumPy优势,尽量避免使用
  • ndarray支持多种类型的数据,这样在科学计算中帮助程序员预估需要的内存大小
名称功能
.ndim秩,轴的数量或维度
.shape数组大小,对于矩阵就是行和列
.size元素个数
.dtype对象的元素类型
.itemsize每个元素的大小,以字节为单位
ndarray支持的元素类型说明
bool布尔类型,true,false
intcC语言中类型一致,一般是int32/int64
intp用于索引的整数
int1616长度的整数,[-2^16, 2^16]
int8
int32
int64
a=np.array([2,3])
a.shape # (1,2)
a.ndim # 1
a.dtype # dtype('int32')
a.size # 2
  1. 一维数组
  • 一维数组的索引,从右到左是-1逐渐递减;创建可以用np.array([2,.])
  • 一维数组的切片,一次选择多个元素 a[2:3:4] 三个元素依次是指 起始编号:终止编号(不含):步长
a=np.array([2,3,4,5,6,7])
print(a[:,:,2])
# array([2,4,6])
  1. 多维数组
  • 多维数组的索引 a=np.arange(24).reshape(1,2,3) 取从0到23的数,将其分为123的张量
  • 多维数组的切片索引a(:,1,-3) # 在每个维度上都可以用冒号表示区间,不同维度用逗号分隔
  • 在不同维度上也可以使用步长,如下面的例子 print(a[:,::2])输出矩阵隔一个元素所获得的值
a=np.arange(24).reshape(3,8)
print(a[:,3])
print(a[:,::2])

二、np.array的运算

  1. 与常数运算,数组每个元素都和常数运算
a=np.array([3,4,5])
print(a.mean()) 
print(a*4)
  1. numpy常用的对数组数据的操作
名称功能
a**3a^3
np.abs(x),np.fabs(x)绝对值
np.sqrt(x)开方
np.square(x)平方
np.log(x),np.log10(x),np.log2(x)自然对数,10为底对数,2为底对数
np.rint(x)各元素的四舍五入值
np.modf(x)将各元素的小数部分和整数部分以两个独立数组形式返回
np.cos(x),…可以计算各元素的三角函数值,其他的类型用到再查
np.exp(x)指数值
np.sign(x)各元素符号值,1(+),0,-1(-),即元素值为正数时为1,负数时为-1,其他为0
  1. 二元数组的操作
NameDefinition
np.maximun(x,y)取两个元素对应位置的元素的最大值组成新数组

单元二 数据存取和函数

一、CSV文件存取

  1. CSV(Comma-Seperated Value,逗号分隔值),一种常见文件格式用来存储批量数据,以逗号分隔
    在这里插入图片描述

  2. CSV存储的局限性: (1) 只能有效存储一维和二维数组

  3. CSV文件存取的函数:

(1)np.savetext(frame, array, fmt='%.18e', delimiter=',')

  • frame: 文件名,可以是.gz 或 .bz2的压缩文件
  • array: 待存入的数组
  • fmt: 写入文件格式,如 %d, %.2f, %.18e
  • delimeter: 分隔字符串,默认是空格

(2) np.loadtext(frame, dtype=np.float, delimiter=',', unpack=false)

  • frame: 文件名,可以是.gz 或 .bz2的压缩文件
  • dtype: 数据类型
  • delimeter: 分隔字符串,默认是空格
  • unpack: 如果为True, 读入属性将分别写入不同变量
a=np.arange(100).reshape(5,20)
np.savetxt('a.csv',a,fmt='%d',delimiter=',')

在这里插入图片描述

b=np.loadtxt('a.csv',dtype=np.int,delimeter=',')

在这里插入图片描述

二、多维数据的存取

多维数据的存取这里介绍两种方法:a.tofile&a.fromfilenp.save&np.load()

2.1

  • tofile()函数和fromfile()需要配合使用。该方法需要读取时知道存入文件时数组的维度和元素类型才可以还原,可以通过元数据文件来存取额外信息

2.1.1 a.tofile(frame, sep=' ', format='%s')

  • frame: 文件名,后缀可以是.dat
  • sep: 数据分隔字符串,如果是空,则写入文件为二进制格式
  • format: 写入数据的格式,如%d
a=np.arange(100).reshape(5,10,2)
a.tofile('a.dat',sep=',',format='%d')

在这里插入图片描述

  • 存为二进制文件
    在这里插入图片描述
2.2.2 np.fromfile(frame, dtype=float, count=-1, sep=' ')
  • frame: 文件,字符串
  • dtype: 读取的数据类型
  • count: 读入元素个数,-1表示读入整个文件
  • sep: 数据分隔字符串,如果是空串,写入文件为二进制
c=np.fromfile("b,dat", dtype=np.int, sep=", ")

在这里插入图片描述在这里插入图片描述

2.2 numpy类型自有的便捷文件存取

np.save("a.npy",a) 文件存储,后缀为.npy
np.sazez("a.npz",a) 文件存为压缩文件,后缀为.npz
np.load("a.npy") 文件获取

三、NumPy的随机数函数

3.1 生成随机数的四个基本函数,前缀均为np.random.**

在这里插入图片描述

a=np.random.rand(3,4,5) # 0,1均匀分布
b=np.random.randn(3,4,5) # 标准正态分布
c=np.randint(100,200,(3,4)# 在100-200内取12个值,形成3*4的矩阵
np.random.seed(1) # 种子可以实现,种子后对应的参数相同的相同随机函数类型可以生成相同的矩阵
np.random.randint(100,200,(3,4))
np.random.seed(1)
np.random.randint(100,200,(3,4))

在这里插入图片描述
在这里插入图片描述

注:均匀分布是连续分布,具体定义如下
在这里插入图片描述

3.2 np.random的随机函数操作函数

函数说明
shuffle(a)根据数组a的第一轴进行随机排列,改变数组第0轴排序
permutation(a)根据数组的第1轴产生一个新的乱序数组,不改变数组x
choice(a[size,replace,p])从一维数组a中以概率p抽取元素,形成size形状新数组,replace表示是否可以重用元素,默认是false

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.3 NumPy的随机函数(3)

函数说明
uniform(low, high, size)均匀分布数组,low,起始值,high结束值,size形状
normal(loc,scale,size)正态分布数组,loc均值,scale标准差,size形状
possion(lam,size)泊松分布数组,lam随机事件发生概率,size形状

在这里插入图片描述

四、NumPy的统计函数

4.1 NumPy的统计函数

注:axis=None是统计函数的标配参数

函数说明
sum(a,axis=None)根据给定轴axis计算相关元素和,axis可以是整数或元组
mean(a,axis=None)根据给定轴计算期望,axis可以是整数或数组
average(a,axis=None, weights=None)计算给定轴相关元素加权平均
std(a,axis=None)计算给定轴的标准差
var(a,axis=None)计算给定轴的方差

在这里插入图片描述

  • 注意average()函数可以实现加权平均/font<>

4.2 NumPy的统计函数(2)

函数说明
min(a),max(a)数组a中元素最大,最小值
argmin(a),argmax(a)返回最大,最小值的降一维后下标
unravel_index(index, shape)根据shape将获得的值的降一维下标index转换成原多维下标
ptpt(a)计算最大与最小值的差
median(a)计算数组中元素的中位数

在这里插入图片描述

4.3 NumPy的梯度函数

函数说明
np.gradient(f)计算数组f中元素的梯度,当f为多维时,返回每个维度梯度
  • 梯度:连续值之间的变化率,即斜率。XY坐标轴连续三个X坐标对应的Y轴值:a,b,cm其中,b的梯度是:(c-a)/2
  • 对于数组中grad的计算,当数据两侧都有值时,grad计算公式为(v3-v1)/2(c-a)/2
  • 当数组中边缘处的值,计算为当前值减去其相邻值,除数为1。(v2-v1)/1

在这里插入图片描述
在这里插入图片描述

五、案例:利用NumPy进行图像数据的简单处理

5.1. 图像的数组表示:

  • RGB 三个颜色通道的变化和叠加得到各种颜色,其中
  • R 红色,取值范围,0-255;G 绿色,B,蓝色
  • RGB 形成的颜色包括了人类视力所能感知的所有颜色

5.2. PIL(Python Image Library) PIL 库是强大图像处理能力的第三方库

  • 使用方法from PIL import Image
  • 图像的数组表示

在这里插入图片描述

  • 图像是一个三维数组,维度分别是高度,宽度和像素RGB值

在这里插入图片描述

5.2 图像变换

  • 读入图像后,获得像素RGB值,修改保存为新的文件
from PIL import Image
import numpy as np
a=np.array(Image.open("D:/test.jpg"))
b=[255,255,255]-a
im=Image.fromarray(b.astype('uint8'))
im.save("D:/test_save.jpg")
  • 图像的变换

在这里插入图片描述

5.3 图像手绘效果实例分析

  1. 手绘效果的几个特征: 黑白灰色+边界线条较重+相同或相近色彩趋于白色+略有光源效果
  2. 利用像素之间梯度值(明暗效果)和虚拟深度值(立体效果,光源效果)对图像进行重构,根据灰度变化模拟人类视觉的远近程度

在这里插入图片描述

  1. 光源效果:设计一个位于图像斜上方的虚拟光源建立光源对个点梯度值的影响函数,运算出各点的新像素值

在这里插入图片描述在这里插入图片描述

  1. 梯度归一化,为了避免数据越界,将生成的灰度值裁剪为0-255区间的值

在这里插入图片描述
在这里插入图片描述

5.4 总代码以及效果图

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值