Python 基础科学模块包以及数据可视化

前言

在深度学习机器学习的领域当中,Numpy是向量运算或矩阵运算的主力军。它极大简化了向量和矩阵的操作处理。在平时的学习和工作当中,对于Numpy的一些基础操作不是特别熟悉,尤其是高维数据,当沿着某个轴运算的时候,无法确定其运算原理。另外tensorflow里面的api与numpy运算也有着非常相似的操作,容易混淆,在tensorflow计算图中尽量避免使用numpy的api,不然会报错。因此,这篇博客主要总结Numpy、tensorflow、Pandas的知识以及一些api。相关的api参考可以访问各自的数据模块包的官网

Numpy

导入Numpy数据包:

import numpy as np

Numpy的基本数据类型是ndarray,意味着N-dimensional array,N维数组。它的属性有ndim:维度数量,shape:一个表示各维度大小的元组,即数组的形状,dtype:一个用于说明数组元素类型的对象。size:元素总个数,即shape中各数组相乘。

基本操作

  1. 创建数组
    创建数组可以通过np.array()创建numpy数组,它的类型是numpy.ndarray
    在这里插入图片描述
    另外还可以通过np.onesnp.zeros()np.random.random()根据自己实际的需求生成对应的数组。
    在这里插入图片描述

  2. 索引
    在这里插入图片描述
    布尔索引
    在这里插入图片描述

多维数组的索引
在这里插入图片描述
3. 聚合
在这里插入图片描述
4. 点乘
在这里插入图片描述
5. 矩阵索引
在这里插入图片描述
6. 矩阵聚合
在这里插入图片描述
不仅可以聚合矩阵中的所有值,还可以使用 axis 参数执行跨行或跨列聚合:
在这里插入图片描述
注意: axis=n表示沿着第n个下边变化的方向。如一个3维的数组a为(3,4,2),每个元素可以表示 a 000 a_{000} a000 a 001 a_{001} a001 a 010 a_{010} a010 a 011 a_{011} a011 a 100 a_{100} a100…以此类推,那么axis=0求和,表示 a 000 + a 100 + a 200 , a 001 + a 101 + a 201 a_{000}+a_{100}+a_{200},a_{001}+a_{101}+a_{201} a000+a100+a200a001+a101+a201
在这里插入图片描述
常见的一元函数如下:

一元函数说明
abs、fabs计算整数、浮点数或复数的绝对值。对于非复数值,可以使用fabs
sqrt计算各个元素的平方根,相当于arr**0.5
square计算各元素的平方,相当于arr**2
exp计算各元素的指数e的x次方
log, log10, log2, log1p分别为自然对数、底数是10的log,底数为2的log,log(1+x)
sign计算各元素的正负号:1 正数,0 零 , -1 负数
cell计算各元素的ceiling值,即大于等于该值的最小整数
floor计算各元素的floor值,即小于等于该值的最大整数
isnan判断哪些值是NaN的布尔类型数组
isfinite,isinf分别表示哪些元素是有穷的,哪些元素是无穷的
logical_not计算各元素not x的真值,相当于 ~ 和 -arr
  1. 转置
    在这里插入图片描述

相关API

  1. np.unique
    在这里插入图片描述
  2. 二进制运算
方法描述
bitwise_and按元素计算两个数组的按位与
bitwise_or按元素计算两个数组的按位或
bitwise_xor按元素计算两个数组的按位异或
invert按元素计算按位求逆,或按位求非
  1. numpy.nditer
    参考地址:https://numpy.org/devdocs/reference/generated/numpy.nditer.html#numpy.nditer

  2. 线性代数

矩阵和向量积

方法描述
dot两个数组的点积
linalg.multi_dot在单个函数调用中计算两个或更多数组的点积,同时自动选择最快的求值顺序
vdot返回两个向量的点积
inner计算两个数组的内积
outer计算两个向量的外积
matmul计算两个数组的矩阵乘积
  1. 逻辑运算
    | 方法 | 描述 |
    |–|--|
    |logical_and|按元素计算x1和x2的真值|
    |logical_or|按元素计算x1或x2的真值|
    |logical_not|计算非x元素的真值|
    |logical_xor|按元素计算x1 xor x2的真值|
    在这里插入图片描述

  2. 数学函数
    四舍五入

方法描述
around平均舍入到给定的小数位数
round将数组舍入到给定的小数位数
fix四舍五入为0
floor返回输入的底限
ceil返回输入的上限
  1. 搜索
方法描述
argmax返回沿着某个轴方向的最大值下标
argmin返回沿着某个轴方向的最小值下标
where根据条件选择x中的元素还是y中的元素

np.where
np.where是三元表达式x if confition else y的矢量化版本。
在这里插入图片描述

  1. 统计相关的
    均值和偏差
    |方法|描述|
    |–|--|
    |median|沿着某个轴计算中值|
    |average|沿着某个轴计算平均值,有权重|
    |mean|沿着某个轴计算平均值|
    |std|计算标准差|
    |var|计算偏差|

实际应用

  1. 公式
    实现可用于矩阵和向量的数学公式是 NumPy 的关键用例。这就是 NumPy 是 python 社区宠儿的原因。例如均方差公式,它是监督机器学习模型处理回归问题的核心: M S E = 1 n ∑ i = n N ( Y i ^ − Y i ) 2 MSE=\frac{1}{n}\sum^N_{i=n}(\hat{Y_i}-Y_i)^2 MSE=n1i=nN(Yi^Yi)2

对应的numpy公式:

MSE = (1/n)*np.sum(np.square(prediction-labels))
  1. 数据表示
  • 表格和电子表格
    在这里插入图片描述
  • 音频和时间序列
    音频文件是样本的一维数组。每个样本都是一个数字,代表音频信号的一小部分。CD 质量的音频每秒包含 44,100 个样本,每个样本是-65535 到 65536 之间的整数。这意味着如果你有一个 10 秒的 CD 质量 WAVE 文件,你可以将它加载到长度为 10 * 44,100 = 441,000 的 NumPy 数组中。如果想要提取音频的第一秒,只需将文件加载到 audio 的 NumPy 数组中,然后获取 audio[:44100]。
    在这里插入图片描述

Pandas

为了节省时间,这里不做详细的描述了,详情可以查看:pandas中文网

数据可视化

Tensorboard

Tensorboard是Tensorflow的一个神器级工具,给用户提供了模型可视化的功能。在构建神经网络模型过程中,只要模型开始训练,我们需要关心神经网络的参数变化、超参数变化,准确率怎么样、loss收敛了吗以及debug程序。因此Tensorboard通过结合web应用为我们提供这些功能,它将模型训练过程中的细节以图表的形式通过浏览器可视化展现,可以清晰感知weight、bias、accuracy等变化,把握训练趋势。
在这里插入图片描述

通过tensorboard提供的图标,可以清楚知道loss和accuracy在每一个epoch中是怎么变化。Tensorboard提供了查看其他内容的功能:

  • 在scalars下可以看到accuracy、bias、weight等趋势
  • 在images和audio可以看到输入的数据
  • 在graphs中可以看到模型的结构
  • 在histogram可以看到activations,gradients或者weights等变量每一步的分布
  • distribution和histogram是两种不同的形式,可以看到整体状况
  • 在embedding看到PCA将高维数据投影到3D空间后的数据关系

在这里插入图片描述

Matplotlib

Matplotlib的官方API文档地址:https://matplotlib.org/stable/index.html。

plot(x, y)

import matplotlib.pyplot as plt
import numpy as np

plt.style.use('_mpl-gallery')

# make data
x = np.linspace(0, 10, 100)
y = 4 + 2 * np.sin(2 * x)

# plot
fig, ax = plt.subplots()

ax.plot(x, y, linewidth=2.0)

ax.set(xlim=(0, 8), xticks=np.arange(1, 8),
       ylim=(0, 8), yticks=np.arange(1, 8))

plt.show()

在这里插入图片描述

scatter(x, y)

import matplotlib.pyplot as plt
import numpy as np

plt.style.use('_mpl-gallery')

# make the data
np.random.seed(3)
x = 4 + np.random.normal(0, 2, 24)
y = 4 + np.random.normal(0, 2, len(x))
# size and color:
sizes = np.random.uniform(15, 80, len(x))
colors = np.random.uniform(15, 80, len(x))

# plot
fig, ax = plt.subplots()

ax.scatter(x, y, s=sizes, c=colors, vmin=0, vmax=100)

ax.set(xlim=(0, 8), xticks=np.arange(1, 8),
       ylim=(0, 8), yticks=np.arange(1, 8))

plt.show()

在这里插入图片描述

bar/barh

import matplotlib.pyplot as plt
import numpy as np
plt.style.use('_mpl-gallery')

# make data:
np.random.seed(3)
x = 0.5 + np.arange(8)
y = np.random.uniform(2, 7, len(x))

# plot
fig, ax = plt.subplots()

ax.bar(x, y, width=1, edgecolor="white", linewidth=0.7)

ax.set(xlim=(0, 8), xticks=np.arange(1, 8),
       ylim=(0, 8), yticks=np.arange(1, 8))

plt.show()

在这里插入图片描述

stem

import matplotlib.pyplot as plt
import numpy as np

plt.style.use('_mpl-gallery')

# make data
np.random.seed(3)
x = 0.5 + np.arange(8)
y = np.random.uniform(2, 7, len(x))

# plot
fig, ax = plt.subplots()

ax.stem(x, y)

ax.set(xlim=(0, 8), xticks=np.arange(1, 8),
       ylim=(0, 8), yticks=np.arange(1, 8))

plt.show()

在这里插入图片描述

step

import matplotlib.pyplot as plt
import numpy as np

plt.style.use('_mpl-gallery')

# make data
np.random.seed(3)
x = 0.5 + np.arange(8)
y = np.random.uniform(2, 7, len(x))

# plot
fig, ax = plt.subplots()

ax.step(x, y, linewidth=2.5)

ax.set(xlim=(0, 8), xticks=np.arange(1, 8),
       ylim=(0, 8), yticks=np.arange(1, 8))

plt.show()

在这里插入图片描述

hist

import matplotlib.pyplot as plt
import numpy as np

plt.style.use('_mpl-gallery')

# make data
np.random.seed(1)
x = 4 + np.random.normal(0, 1.5, 200)

# plot:
fig, ax = plt.subplots()

ax.hist(x, bins=8, linewidth=0.5, edgecolor="white")

ax.set(xlim=(0, 8), xticks=np.arange(1, 8),
       ylim=(0, 56), yticks=np.linspace(0, 56, 9))

plt.show()

在这里插入图片描述

boxplot

import matplotlib.pyplot as plt
import numpy as np

plt.style.use('_mpl-gallery')

# make data:
np.random.seed(10)
D = np.random.normal((3, 5, 4), (1.25, 1.00, 1.25), (100, 3))

# plot
fig, ax = plt.subplots()
VP = ax.boxplot(D, positions=[2, 4, 6], widths=1.5, patch_artist=True,
                showmeans=False, showfliers=False,
                medianprops={"color": "white", "linewidth": 0.5},
                boxprops={"facecolor": "C0", "edgecolor": "white",
                          "linewidth": 0.5},
                whiskerprops={"color": "C0", "linewidth": 1.5},
                capprops={"color": "C0", "linewidth": 1.5})

ax.set(xlim=(0, 8), xticks=np.arange(1, 8),
       ylim=(0, 8), yticks=np.arange(1, 8))

plt.show()

在这里插入图片描述

Seaborn

seaborn的官方网站是http://seaborn.pydata.org/。seaborn库还是很强大,对我而言比matplotlib好用多。
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值