python数据分析与展示笔记(第一周 数据表示)


内容来自中国大学MOOC,北京理工大学,python数据分析与展示课程,侵删。
如有错误,烦请指出。


python数据分析与展示笔记 第一周 数据表示

一、列表与数组

1. 列表:数据类型可以不同
3.1413, 'pi', 3.1404, [3.1401, 3.1349], '3.1376'
2. 数组:数据类型相同
3.1413, 3.1398, 3.1404, 3.1401, 3.1349, 3.1376

二、数据维度:数据的组织形式

1. 一维数据:列表和集合类型
[3.1398, 3.1349, 3.1376] 有序
{3.1398, 3.1349, 3.1376} 无序
2. 二维数据:列表类型
[ [3.1398, 3.1349, 3.1376],
  [3.1413, 3.1404, 3.1401] ]
3. 多维数据:字典类型或数据表示格式
dict = {
         "firstName": "Tian",
         "lastName" : "Song",
       }

三、NumPy库的 n 维数组对象 ndarray (np.array)

1. ndarray 数组创建

1.1 从 python 中的列表、元组等类型创建 ndarray 数组
3.1.1 - 从 python 中的列表、元组等类型创建 ndarray 数组1.2 使用 NumPy 中的函数创建 ndarray 数组
3.1.2 - 1 - 使用 NumPy 中的函数创建 nparrary 数组3.1.2 - 2 - 使用 NumPy 中的函数创建 ndarray 数组3.1.2 - 3 - arange, ones, zeros 创建数组3.1.2 - 4 - full, eye 创建数组3.1.2 - 5 - ones 创建三维数组1.3 使用 NumPy 中的其他函数创建 ndarray 数组
3.1.3 - 1 - 使用 linspace() 和 concatenate() 函数创建 nparrary 数组3.1.3 - 2 - linspace() 和 concatenate() 创建数组

2. ndarray 数组维度变换

3.2 - 1 - ndarray 数组维度变换

  • .reshape().resize()
    3.2 - 2 - reshape3.2 - 3 - resize
  • .flatten()
    3.2 - 4 - flatten
  • .swapaxes()
    3.2 - 5 - swapaxes
3. ndarray 数组的类型变换
new_a = a.astype(new_type)

.astype() 方法一定会创建新的数组(原始数据的一个拷贝),即使两个类型一致
3.3 - 1 - a3.3 - 2 - b

4. ndarray 数组向列表转换
ls = a.tolist()

3.4 - tolist

5. 一维数组的索引和切片

3.5 - 一维数组的索引和切片

6. 多维数组的索引

3.6 - 1 - 创建数组3.6 - 2 - 索引3.6 - 3 - 切片13.6 - 4 - 切片2

7. ndarray 数组的运算
  • 数组与标量之间的运算作用于数组的每一个元素

3.7 - 1 - 创建数组计算平均值3.7 - 2 - 计算a与平均值的商

8. NumPy 一元函数
  • ndarray 中的数据执行元素级运算的函数

3.8 - 1 - 一元函数13.8 - 2 - 一元函数23.8 - 3 - 创建数组

  • np.abs()
    3.8 - 7 - abs
  • np.sqrt()
    3.8 - 5 - sqrt
  • np.square()
    3.8 - 4 - square
  • np.modf()
    3.8 - 6 - modf
9. NumPy 二元函数

3.9 - 1 - 二元函数3.9 - 2 - 创建数组3.9 - 3 - a 和 b

  • np.maximum()
    3.9 - 4 - maximum
  • >
    3.9 - 4 - 大于

四、NumPy 库的数据存取

1. csv 文件:存储一维和二维数组
  • np.savetxt()
    4.1 - savetxt 4.1 - 2 - a.csv %d 生成4.1 - 3 - a.csv %d 内容4.1 - 4 - a.csv %.1f 生成4.1 - 5 - a.csv %.1f 内容
  • np.loadtxt()
    4.1 - 6 - loadtxt4.1 - 7 - load a.csv 内容4.1 - 8 - load a.csv int 内容
2. dat 文件:存储多维数据

需要读取时知道存入文件时数组的维度和元素类型,.tofile()np.fromfile() 需要配合使用

  • .tofile()
    4.2 - 1 - tofile4.2 - 2 - b.dat d 生成4.2 - 3 - b.dat d 内容当不使用分隔符sep时,生成的是二进制文件
    4.2 - 4 - b.dat d 无分隔 生成4.2 - 5 - b.dat d 无分隔 内容
  • np.fromfile()
    4.2 - 6 - fromfile4.2 - 7 - b.dat int 读取4.2 - 8 - b.dat int reshape 读取
3. npy 文件:存储多维数据、便捷文件存取
  • np.save()
    4.3 - 1 - save4.3 - 2 - save a.npy4.3 - 3 - a.npy 内容
  • np.load()
    4.3 -  - load4.3 - load a.npy

五、NumPy库的随机数函数:np.random.*

5 - 1 - 随机数函数1

  • np.random.rand()
    5 - 2 - rand15 - 3 - rand2
  • np.random.randn()
    5 - 4 - randn15 - 5 - randn2
  • np.random.randint()
    5 - 6 - randint
  • np.random.seed()
    如果每次运行代码时设置相同的seed,则每次生成的随机数相同。
    如果不设置seed,则每次生成的随机数都不同。
    5 - 7 - seed

5 - 8 - 随机数函数2

  • np.random.shuffle()
    5 - 9 - shuffle
  • np.random.permutation()
    5 - 10 - permutation
  • np.random.choice()
    5 - 11 - choice

5 - 12 - 随机数函数2

  • np.random.uniform()
    5 - 13 - uniform
  • np.random.normal()
    5 - 14 - normal
  • np.random.poisson()
    5 - 15 - poisson

六、NumPy库的统计函数:np.*

6 - 1 - 统计函数1axis=None 是统计函数的标配参数
6 - 2 - 生成数组

  • np.sum()np.mean()
    6 - 3 - sum 和 mean
  • np.average()
    6 - 4 - average
  • np.std()np.var()
    6 - 5 - std 和 var

6 - 6 - 统计函数26 - 7 - max, argmax6 - 8 - unravel_index, ptp, median

七、NumPy库的梯度函数:np.gradient()

7 - 1 - gradient

  • 一维数组的梯度
    7 - 2 - 一维梯度
  • 二维数组的梯度
    7 - 3 - 二维梯度17 - 4 - 二维梯度2

八、使用 PIL 库进行图像变换

pip install PIL
from PIL import Image
1. 灰度值取反

8 - 1 - 灰度值取反

2. 区间变换

8 - 2 - 区间变换

3. 像素平方

8 - 3 - 像素平方

九、实例一:图像的手绘效果

1. 代码
'''实例一:图像的手绘效果'''

from PIL import Image
import numpy as np

a = np.asarray(Image.open('img1.jpg').convert('L')).astype('float')

depth = 10.                         # 预设深度值为10,取值范围为 0-100
grad = np.gradient(a)               # 取图像灰度的梯度值
grad_x, grad_y = grad               # 分别取 x 和 y 方向的图像梯度值
grad_x = grad_x*depth/100.          # 根据深度调整 x 方向的梯度值
grad_y = grad_y*depth/100.          # 根据深度调整 y 方向的梯度值
A = np.sqrt(grad_x**2 + grad_y**2 + 1.)
uni_x = grad_x/A
uni_y = grad_y/A
uni_z = 1./A

vec_el = np.pi/2.2                  # 光源的俯视角度,弧度值
vec_az = np.pi/4.                   # 光源的方位角度,弧度值
dx = np.cos(vec_el)*np.cos(vec_az)  # 光源对 x 轴的影响
dy = np.cos(vec_el)*np.sin(vec_az)  # 光源对 y 轴的影响
dz = np.sin(vec_el)                 # 光源对 z 轴的影响

b = 255*(dx*uni_x + dy*uni_y + dz*uni_z)  # 光源归一化
b = b.clip(0,255)

im = Image.fromarray(b.astype('uint8'))   # 重构图像
im.save('img1HD.jpg')
2. 代码分析

(1) 梯度重构

9.2 - 1 - 梯度重构

(2) 光源效果

9.2 - 2 - 光源效果1

9.2 - 3 - 光源效果2

(3) 梯度归一化

9.2 - 4 - 梯度归一化

(4) 图像生成

9.2 - 5 - 图像生成

3. 原图与手绘效果图展示
  • 原图
    9.3 - 1 - 原图
  • 手绘效果图
    9.3 - 2 - 手绘效果图
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值