0%

Here we shall go through the basic thermodynamics that lies behind use of the Ellingham diagram. First, we will establish the link between the thermodynamics of a reaction and its chemistry.

The Gibbs free energy, G, of a system can be described as the energy in the system available to do work. It is one of the most useful state functions in thermodynamics as it considers only variables contained within the system, at constant temperature and pressure.

It is defined as:

G=H−TS (1)

Here, T is the temperature of the system and S is the entropy, or disorder, of the system. H is the enthalpy of the system, defined as;

H=U+pv (2)

Where U is the internal energy, p is the pressure and v is the volume.

To see how the free energy changes when the system is changed by a small amount, we can differentiate the above functions:

dG=dH−TdS−SdT (3)

and;

dH=dU+pdv+vdp (4)

From the first law,

dU=dq′−dw (5)

and from the second law,

dS= dq′T , (6)

we see that,

dG=dq′−dw+pdv+vdp−TdS−SdT=−dw+pdv+vdp−SdT=vdp−SdT (7)

since work, dw=pdv

The above equation shows that if the temperature and pressure are kept constant, we see that the free energy does not change. This means that the Gibbs free energy of a system is unique at each temperature and pressure.

At a constant temperature dT = 0 and so

dG=vdp (8)

We can find G for the system by integration. To do this we need the system’s equation of state, to give a relationship between v and p.

We will consider an ideal gas. For one mole of an ideal gas the equation of state is;

v= RTp , (9)

so (8) becomes

dG= RTdpp (10)

Integrating:

G=RTln(p)+const. (11)

This we can express as

G=$G^∘$+RTln(p$p^∘$) (12)

We define G° to be the standard free energy at the standard pressure, p°. These standard values are nothing more than lower integration constants, but using them is very useful, as we shall see. They are a consequence of the fact that one can only describe energy changes absolutely – there is no absolute energy scale, so the energy value we give to a system is arbitrary.

数据的排序

  • 操作索引的排序,对索引排序

.sort_index(axis=0, ascending=True)

ascending:递增排序

默认0轴纵向排序

  • 指定轴上根据数值进行排序,默认升序

DataFrame.sort_values(by, axis=0, ascending=True)

by : axis轴上的某个索引或索引列表,eg:’a’或0

基本的统计分析函数

方法 说明
.argmin() .argmax() 计算数据最大值、最小值所在位置的索引位置(自动索引)
.idxmin() .idxmax() 计算数据最大值、最小值所在位置的索引(自定义索引)
.sum() 计算数据的总和,按0轴计算,下同
.count() 非NaN值的数量
.mean() .median() 计算数据的算术平均值、算术中位数
.var() .std() 计算数据的方差、标准差
.min() .max() 计算数据的最小值、最大值
.describe() 针对0轴(各列)的统计汇总

数据的累积统计分析

方法 说明
.cumsum() 依次给出前1、2、…、n个数的和
.cumprod() 依次给出前1、2、…、n个数的积
.cummax() 依次给出前1、2、…、n个数的最大值
.cummin() 依次给出前1、2、…、n个数的最小值
.rolling(w).sum() 依次计算相邻w个元素的和
.rolling(w).mean() 依次计算相邻w个元素的算术平均值
.rolling(w).var() 依次计算相邻w个元素的方差
.rolling(w).std() 依次计算相邻w个元素的标准差
.rolling(w).min() .max() 依次计算相邻w个元素的最小值和最大值

数据的相关分析

  • 相关性:x增大,y增大,正相关。x减小,y减小,负相关。x增大,y无视,不相关。
  • 协方差判断
  • Pearson相关系数
1
2
3
4
5
0.81.0 极强相关
0.60.8 强相关
0.40.6 中等程度相关
0.20.4 弱相关
0.00.2 极弱相关或无相关
方法 说明
.cov() 计算协方差矩阵
.corr() 计算相关系数矩阵, Pearson、Spearman、Kendall等系数

何谓 “机器学习”,学界尚未有统一的定义。但有两个定义特别值得了解:一个来自卡内基梅隆大学的Tom Mitchell教授,一个来自Goodfellow、Bengio 和 Courville合著的经典“花书”《深度学习》。

Tom Mitchell:根据优化过程抽象定义机器学习

对于某类任务 T 和性能度量 P,如果一个计算机程序在 T 上以 P 衡量的性能随着经验 E 而自我完善,那么我们称这个计算机程序在从经验 E 中学习。

机器学习的分类

  • 监督学习(Supervised Algorithms):对训练有标签的数据有用,但是对于其他没有标签的数据,则需要预估
  • 无监督学习(Unsupervised Algorithms):用于对无标签的数据集(数据没有预处理)的处理,需要发掘其内在关系的时候
  • 强化学习(Reinforcement Algorithms):介于两者之间,虽然没有精准的标签或者错误信息,但是对于每个可预测的步骤或者行为,会有某种形式的反馈。
  • 半监督学习:
  • 深度学习(Deep Learning):

基本的机器学习算法

  • 线性回归算法 Linear Regression
  • 支持向量机算法 (Support Vector Machine,SVM)
  • 最近邻居/k-近邻算法 (K-Nearest Neighbors,KNN)
  • 逻辑回归算法 Logistic Regression
  • 决策树算法 Decision Tree
  • k-平均算法 K-Means
  • 随机森林算法 Random Forest
  • 朴素贝叶斯算法 Naive Bayes
  • 降维算法 Dimensional Reduction
  • 梯度增强算法 Gradient Boosting

监督学习

1) 决策树 (Decision Trees)

决策树是一个决策支持工具,它用树形的图或者模型表示决策及其可能的后果,包括随机事件的影响、资源消耗、以及用途。请看下图,随意感受一下决策树长这样的:

v2-7c4c6b36873da4a0dbb82fe8d55e5b11_1440w

从商业角度看,决策树就是用最少的 Yes/No 问题,尽可能地做出一个正确的决策。它让我们通过一种结构化、系统化的方式解决问题,得到一个有逻辑的结论。

2) 朴素贝叶斯分类 (Naive Bayes Classification)

朴素贝叶斯分类器是一类简单概率分类器,它基于把贝叶斯定理运用在特征之间关系的强独立性假设上。下图是贝叶斯公式 ——P (A|B) 表示后验概率,P (B|A) 表示似然度,P (A) 表示类别的先验概率 (class prior probability),P (B) 表示做出预测的先验概率 (predictor prior probability)。

v2-5093c94b1556bbf112cce21f08da2cc3_1440w

现实生活中的应用例子:

  • 一封电子邮件是否是垃圾邮件
  • 一篇文章应该分到科技、政治,还是体育类
  • 一段文字表达的是积极的情绪还是消极的情绪?
  • 人脸识别

3) 普通最小二乘回归 (Ordinary Least Squares Regression)

v2-b75d8bf0968ae00525e803e452c4e042_1440w

如果你学过统计学,你可能听过线性回归。至少最小二乘是一种进行线性回归的方法。你可以认为线性回归就是让一条直线用最适合的姿势穿过一组点。有很多方法可以这样做,普通最小二乘法就像这样 —— 你可以画一条线,测量每个点到这条线的距离,然后加起来。最好的线应该是所有距离加起来最小的那根。

线性法表示建模线性模型,而最小二乘法可以最小化该线性模型的误差。

4) 逻辑回归 (Logistic Regression)

逻辑回归是一种非常强大的统计方法,可以把有一个或者多个解释变量的数据,建立为二项式类型的模型,通过用累积逻辑分布的逻辑函数估计概率,测量分类因变量和一个或多个独立变量之间的关系。

通常,回归在现实生活中的用途如下:

  • 信用评估
  • 测量市场营销的成功度
  • 预测某个产品的收益
  • 特定的某天是否会发生地震

5) 支持向量机 (Support Vector Machines)

v2-818dea0b2a5db0d06b4d09c4c35e4add_1440w

SVM 是一种二分算法。假设在 N 维空间,有一组点,包含两种类型,SVM 生成 a (N-1) 维的超平面,把这些点分成两组。比如你有一些点在纸上面,这些点是线性分离的。SVM 会找到一个直线,把这些点分成两类,并且会尽可能远离这些点。

从规模看来,SVM(包括适当调整过的)解决的一些特大的问题有:广告、人类基因剪接位点识别、基于图片的性别检测、大规模图片分类…

6) 集成方法 (Ensemble Methods)

v2-fb5fe42fac7ae7a423c438640de92cff_1440w

集成方法吸纳了很多算法,构建一个分类器集合,然后给它们的预测带权重的进行投票,从而进行分类。最初的集成方法是贝叶斯平均法 (Bayesian averaging),但是最近的算法集还包括了纠错输出编码 (error-correcting output coding) ,bagging 和 boosting

那么集成方法如何工作的?为什么它们比单独的模型更好?

  • 它们均衡了偏差:就像如果你均衡了大量的倾向民主党的投票和大量倾向共和党的投票,你总会得到一个不那么偏颇的结果。
  • 它们降低了方差:集合大量模型的参考结果,噪音会小于单个模型的单个结果。在金融上,这叫投资分散原则 (diversification)—— 一个混搭很多种股票的投资组合,比单独的股票更少变故。
  • 它们不太可能过度拟合:如果你有单独的模型不是完全拟合,你结合每个简单方法建模,就不会发生过度拟合 (over-fitting)

无监督学习

7) 聚类算法 (Clustering Algorithms)

v2-f54021ee5f3458d96bfdbfd633020194_1440w

聚类就是把一组对象分组化的任务,使得在同一组的对象比起其它组的对象,它们彼此更加相似。

每种聚类算法都不同,下面是其中一些:

  • 基于图心(Centroid)的算法
  • 基于连接的算法
  • 基于密集度的算法
  • 概率论
  • 降维
  • 神经网络 / 深度学习

8) 主成分分析 (Principal Component Analysis)

PCA 是一种统计过程,它通过正交变换把一组可能相关联的变量观察,转换成一组线性非相关的变量的值,这些非相关的变量就是主成分。

PCA 的应用包括压缩、简化数据使之易于学习,可视化。需要注意的是,当决定是否用 PCA 的时候,领域知识特别重要。它不适用于噪音多的数据(所有成分的方差要很高才行)

9) 奇异值分解 (Singular Value Decomposition)

v2-6ab79925833165f9076bde770beb081e_1440w

线性代数中,SVD 是对一个特别复杂的矩阵做因式分解。比如一个 m*n 的矩阵 M,存在一个分解如 M = UΣV,其中 U 和 V 是酉矩阵,Σ 是一个对角矩阵。

PCA 其实是种简单的 SVD。在计算机图形领域,第一个脸部识别算法就用了 PCA 和 SVD,用特征脸 (eigenfaces) 的线性结合表达脸部图像,然后降维,用简单的方法把脸部和人匹配起来。尽管如今的方法更加复杂,依然有很多是依靠类似这样的技术。

10) 独立成分分析 (Independent Component Analysis)

v2-fafdf6f5525015e99a976f66eb64fb06_1440w

ICA 是一种统计技术。它发掘随机变量、测量数据或者信号的集合中隐含的因素。ICA 定义了一种通用模型,用于观测到的多变量数据,通常是一个巨大的样本数据库。在这一模型中,假设数据变量是一些未知的、潜在的变量的线性组合,而组合方式也是未知的。同时假设,潜在的变量是非高斯分布且相互独立的,我们称之为观测数据的独立成分 (Independent components)。

ICA 与 PCA 有一定关联,但是一种更加有用的技术,在经典方法完全失效的时候,可以发现数据源中的潜在因素。它的应用包括数字图片,文件数据库,经济指数和心理测量。

Pandas库-处理和分析数据最好的第三方库

官方网站

1
import pandas as pd

两个数据类型:Series和DataFrame,基于ndarray扩展的数据类型。Pandas注重数据和索引之间的关系。

Series(一维数据类型)

由一组数据和其索引组成,就是一维带标签的数据,类似于字典和ndarray的操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import pands as pd
#自定义索引
b = pd.Series([9,8,7,6],index=['a','b','c','d'])
#python中NaN表示为空
#获得索引和值
b.index
b.values
#Series可以进行切片
b[:3]
#针对于ndarray进行的操作也可以用于Series
np.exp(b)
#输出大于元素中位数的索引
b[b>b.median()]
#判断键是否在Series中和调取键值
'c' in b
b.get('a')

对齐问题:运算中只运算相对应索引的元素

Dataframe(二维数据类型)

多列的数据共用相同索引,表格型数据类型。我理解为c中的数组

有行索引也有列索引。纵向索引index,横向索引column

1
2
3
import pandas as pd
import numpy as np
b = DataFrame(np.nrange(10).reshape(2,5))

字典转换成DataFrame格式的时候,键会变成表头,值会变成竖着排列的值。

尝试着用DataFrame处理CSV文件

d.reindex:重排生成的表格。

1
2
.reindex(index=None, columns=None, …)
index是lie,column是行
方法 说明
.append(idx) 连接另一个Index对象,产生新的Index对象
.diff(idx) 计算差集,产生新的Index对象
.intersection(idx) 计算交集
.union(idx) 计算并集
.delete(loc) 删除loc位置处的元素
.drop() 删除Series和DataFrame指定行或列索引

数据类型的算术运算

  • 加减乘除算数运算
方法 说明
.add(d, **argws) 类型间加法运算,可选参数
.sub(d, **argws) 类型间减法运算,可选参数
.mul(d, **argws) 类型间乘法运算,可选参数
.div(d, **argws) 类型间除法运算,可选参数

eg.b.add(a, fill_value=100)

Note:还可以直接利用+-*/运算

  • 比较运算

>< >= <= == !=进行大小比较,与每个元素都比较,返回布尔值

简介

官方网站

matplotlib.pyplot是最方便的子库

1
import matplotlib.pyplot as plt

常见功能

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#多图合并,2行3列第一区域
plt.subplot(2,3,1)

#画出一条折线图,横坐标是这个数的索引(0,1,2,3,4)
plt.plot([3,1,4,5,2])

#纵坐标名称
plt.ylabel('grade')
plt.xlabel('name')

#其他文本显示
plt.title()
plt.text(x,y,内容,fontsize=20)#在任意位置增加文本,xy是文本开始的坐标
plt.annotate()#在图形中增加带箭头的注解

#带箭头的文本
plt.annotate(s(解释的内容), xy=arrow_crd(箭头开始位置),
xytext=text_crd(文本位置), arrowprops=dict(字典描述箭头属性))
plt.annotate('$\mu=100$',xy=(2,1),xytxt=(3,1.5),
arrowprops=dict(facecolor='black',shrink=0.1,width=2))

#展示图形
plt.show()
#保存图形
plt.savefig('test.tif', dpi = 300)

#两个参数,分别控制x轴和y周,先x后y
plt.plot([0,2,4,6,7],[3,1,4,5,2])
#设置x,y轴参数范围
plt.axis([-1,10,0,6])

#设置中文字体(改变全局字体,包括坐标轴上的数字)
matplotlib.rcParams['font.family']='Kaiti'or'SimHei'
or'LiSu'or'FangSong'or'YouYuan'or'STSong'
matplotlib.rcParams['font.style']='normal' or 'italic'
matplotlib.rcParams['font.size']='large' or 'x-small'

#设置中文字体(改变部分字体)
在有中文输出的地方,增加一个属性:fontproperties
plt.xlabel('横轴:时间', fontproperties='SimHei',
fontsize=20,color = 'green')
#增加网格
plt.grid(True)

plot函数

参数 plt.plot(x,y,format_string, **kwargs)
x x轴上的数据,列表或numpy数组
y y轴上的数据,列表或numpy数组
format_string 颜色字符、风格字符和标记字符,可选
**kwargs 第二组或更多(x,y,format_string)
—-颜色— —-颜色—
‘r’,’g’,’b’,’y’,’k’,’w’ 红绿蓝黄黑白
‘c’ 青绿色cyan
‘#008000’ RGB某颜色
‘m’ 洋红色magenta
‘0.8’ 灰度值字符串
—直虚线— —直虚线—
‘‐’ 实线
‘‐‐’ 破折线
‘‐.’ 点划线
‘:’ 虚线
‘ ‘ 无线条
标记字符 说明 标记字符 说明 标记字符 说明
‘.’ 点标记 ‘1’ 下花三角 ‘h’ 竖六边形
‘,’ 像素标记(极小点) ‘2’ 上花三角 ‘H’ 横六边形
‘o’ 实心圈标记 ‘3’ 左花三角 ‘+’ 十字
‘v’ 倒三角标记 ‘4’ 右花三角 ‘x’ x
‘^’ 上三角标记 ‘s’ 实心方形 ‘D’ 菱形
‘>’ 右三角标记 ‘p’ 实心五角 ‘d’ 瘦菱形
‘<’ 左三角 ‘*’ 星形 ‘|’ 垂直线

另一种改变线条方式:

参数 plt.plot(x, y, format_string, **kwargs)
color 控制颜色, color=’green’
linestyle 线条风格, linestyle=’dashed’
marker 标记风格, marker=’o’
markerfacecolor 标记颜色, markerfacecolor=’blue’
markersize 标记尺寸, markersize=20

复杂绘图区域

1
2
3
4
5
6
7
8
9
10
11
12
13
plt.subplot2grid(GridSpec, CurSpec, colspan=1, rowspan=1)
例子:
plt.subplot2grid((3,3), (1,0), colspan=2)
第一个参数,将区域分成3*3类型
选定的位置,第一行,0
colspan延伸,横着向右延伸为2
rowspan向下延伸

plt.subplot2grid((3,3),(0,0),colspan=3)
plt.subplot2grid((3,3),(1,0),colspan=2)
plt.subplot2grid((3,3),(1,2),rowspan=2)
plt.subplot2grid((3,3),(2,0))
plt.subplot2grid((3,3),(2,0))

第二种方法:

1
2
3
4
5
6
7
8
import matplotlib.gridspec as gridspec
gs = gridspec.GridSpec(3,3)

ax1 = plt.subplot(gs[0,:])
ax2 = plt.subplot(gs[1,:-1])
ax3 = plt.subplot(gs[1:,-1])
ax4 = plt.subplot(gs[2,0])
ax5 = plt.subplot(gs[2,1])

常见图形绘制方法

函数 说明
plt.plot(x,y,fmt,…) 绘制一个坐标图
plt.boxplot(data,notch,position) 绘制一个箱形图
plt.bar(left,height,width,bottom) 绘制一个条形图
plt.barh(width,bottom,left,height) 绘制一个横向条形图
plt.polar(theta, r) 绘制极坐标图
plt.pie(data, explode) 绘制饼图
plt.psd(x,NFFT=256,pad_to,Fs) 绘制功率谱密度图
plt.specgram(x,NFFT=256,pad_to,F) 绘制谱图
plt.cohere(x,y,NFFT=256,Fs) 绘制X‐Y的相关性函数
plt.scatter(x,y) 绘制散点图,其中,x和y长度相同
plt.step(x,y,where) 绘制步阶图
plt.hist(x,bins,normed) 绘制直方图
plt.contour(X,Y,Z,N) 绘制等值图
plt.vlines() 绘制垂直图
plt.stem(x,y,linefmt,markerfmt) 绘制柴火图
plt.plot_date() 绘制数据日期
  • plt.pie()
1
2
3
4
5
6
7
8
9
10
11
#饼图
import matplotlib.pyplot as plt
labels = 'Frog', 'Hogs', 'Dogs', 'Logs'
sizes = [15,30,45,10]
explode = (0,0.1,0,0)
#尺寸,哪一快突出,标签,字体格式,阴影关闭,其实数据角度
plt.pie(sizes, explode=explode, labels=labels,autopct=%1.1f%
,shadow=False, startangle=90)
#xy等距离,饼图是正向看着的
plt.axis('equal')
plt.show()
  • plt.hist()
1
2
3
4
5
6
7
8
9
#直方图,从所有数据中均等的选取某些数据,第二个参数确定参数的个数
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(0)
mu, sigma=100,20#均值和标准差
a = np.random.normal(mu, sigma, size=100)
plt.hist(a,10,normed=1,histtype='stepfilled',facecolor='b',alpha=0.75)

plt.show()
  • 极坐标图
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import matplotlib.pyplot as plt
import numpy as np

N = 20
theta = np.linspace(0.0,2*np.pi,N,endpoint=False)
radii = 10*np.random.rand(N)
width = np.pi/4*np.random.rand(N)
#打开极坐标绘图选项
ax = plt.subplot(111,projection='polar')
bars = ax.bar(theta,radii,width=width,bottom=0.0)

for r,bar in zip(radii,bars):
bar.set_facecolor(plt.cm.viridis(r/10.0))

plt.show()
  • 散点图
1
2
3
4
5
6
7
8
import matplotlib.pyplot as plt
import numpy as np
#面向对象编程
fig, ax=plt.subplots()#默认绘制区域为111
ax.plot(10*random.randn(100),10*random.randn(100),'o')
ax.set_title('Simple Scatter')

plt.show()

CSV文件存取(逗号分隔值)

  • 最简便的方法(基于numpy自定义的文件格式),适于程序中间步骤
函数 参数说明
np.save(fname, array) fname:文件名,array:数组变量
np.savez(fname, array) 分别以.npy为扩展名,压缩扩展名为.npz
np.load(flame) fname : 文件名,以.npy为扩展名,压缩扩展名为.npz
  • 存csv
1
np.savetxt(frame,array,fmt='%.18e',delimiter=None)
参数 功能
frame (文件名)文件、字符串或产生器,可以是.gz或.bz2的压缩文件
array 存入文件的数组
fmt 写入文件的格式,例如:%d %.2f %.18e
delimiter 分割字符串,默认是任何空格
1
np.savetxt('a.csv',a,fmt = '%d', delimiter = ',')
  • 读csv
1
np.loadtxt(frame, dtype=np.float, delimiter=None, unpack=False)
参数 说明
frame (文件名)文件、字符串或产生器,可以是.gz或.bz2的压缩文件
dtype 数据类型,可选
delimiter 分割字符串,默认是任何空格
unpack 如果True,读入属性将分别写入不同变量
  • 写多维数据
1
a.tofile(frame, sep='', format='%s')
参数 说明
frame (文件名)文件、字符串
sep 数据分割字符串,如果是空串,写入文件为二进制
format 写入数据的格式
  • 读多维数据
1
np.fromfile(frame, dtype=float, count=‐1, sep='')
参数 说明
frame (文件名)文件、字符串
dtype 读取的数据类型
count 读入元素个数,‐1表示读入整个文件
sep 数据分割字符串,如果是空串,写入文件为二进制

Numpy的随机数函数-random字库

函数 说明
rand(d0,d1,..,dn) 根据d0‐dn创建随机数数组,浮点数,[0,1),均匀分布
randn(d0,d1,..,dn) 根据d0‐dn创建随机数数组,标准正态分布
randint(low[,high,shape]) 根据shape创建随机整数或整数数组,范围是[low, high)
seed(s) 随机数种子,s是给定的种子值
shuffle(a) 根据数组a的第0轴进行随排列,改变数组x
permutation(a) 同shuffle(a)功能,但不改变数组
choice(a[,size,replace,p]) 从一维数组a中以概率p抽取元素,形成size形状新数组replace表示是否可以重用元素,默认为False
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计算数组a相关元素之和,axis整数或元组
mean(a, axis=None) 根据给定轴axis计算数组a相关元素的期望,axis整数或元组
average(a,axis=None,weights=None) 根据轴axis计算数组a相关元素的加权平均值
std(a, axis=None) 根据给定轴axis计算数组a相关元素的标准差
var(a, axis=None) 根据给定轴axis计算数组a相关元素的方差
min(a) max(a) 计算数组a中元素的最小值、最大值
argmin(a) argmax(a) 计算数组a中元素最小值、最大值的降一维后下标
unravel_index(index, shape) 根据shape将一维下标index转换成多维下标
ptp(a) 计算数组a中元素最大值与最小值的差
median(a) 计算数组a中元素的中位数(中值)
np.gradient(f) 计算数组f中元素的梯度,当f为多维时,返回每个维度梯度

Numpy

  • 强大的N维数组对象:ndarray
  • 线性代数,傅立叶变换的功能
1
import numpy as np
  • 相对于python列表的优点:可以直接对数组为对象进行运算
  • 用numpy生成以为数组,使得以为向量更像单个数据
1
a = np.array([1,2,3,4,5])

N维数组对象-ndarray

ndarray是一个多维数组对象,由两部分构成:

-  实际的数据
-  描述这些数据的元数据(数据维度、数据类型等)

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

ndarray对象的属性

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

ndarray数组的创建方法

1
x = np.array(list/tuple, dtype=np.float32)

常用函数:

函数 说明
np.arange(n) 类似range()函数,返回ndarray类型,元素从0到n‐1(整数类型)
np.ones(shape) 根据shape生成一个全1数组,shape是元组类型
np.zeros(shape) 根据shape生成一个全0数组,shape是元组类型
np.full(shape,val) 根据shape生成一个数组,每个元素值都是val
np.eye(n) 创建一个正方的n*n单位矩阵,对角线为1,其余为0
np.ones_like(a) 根据数组a的形状生成一个全1数组
np.zeros_like(a) 根据数组a的形状生成一个全0数组
np.full_like(a,val) 根据数组a的形状生成一个数组,每个元素值都是val
np.linspace() 根据起止数据等间距地填充数据,形成数组
np.concatenate() 将两个或多个数组合并成一个新的数组

Note:np.linspace(1,10,4,endpoint = False)

1
2
np.linspace(1,10,4,endpoint = False)
>>> array([1., 3.25, 5.5, 7.75])

纬度变换

方法 说明
.reshape(shape) 不改变数组元素,返回一个shape形状的数组,原数组不变
.resize(shape) 与.reshape()功能一致,但修改原数组
.swapaxes(ax1,ax2) 将数组n个维度中两个维度进行调换
.flatten() 对数组进行降维,返回折叠后的一维数组,原数组不变
.astype(np.float) astype()方法一定会创建新的数组(原始数据的一个拷贝)
.tolist() 转换为列表

数组的索引和切片

a[:, 1, 3] 不关心第一个维度,覆盖所有元素

a[:, :, ::2] 不关心第一个和第二个维度,第三个维度选取一半

NumPy一元函数

函数 说明
np.abs(x) or np.fabs(x) 各元素的绝对值
np.sqrt(x) 各元素的平方根
np.square(x) 各元素的平方
np.log(x) np.log10(x) np.log2(x) 自然对数、10底对数和2底对数
np.ceil(x) np.floor(x) 向上舍,向下舍整数值
np.rint(x) 计算数组各元素的四舍五入值
np.modf(x) 将各元素的小数和整数部分以两个独立数组返回
np.exp(x) 各元素的指数值
np.cos(x)|np.cosh(x)|np.sin(x) |np.sinh(x)|np.tan(x)|np.tanh(x) 普通型和双曲型三角函数
a .mean() 平均值

NumPy二元函数

函数 说明
+ ‐ * / ** 两个数组各元素进行对应运算
np.maximum(x,y) np.fmax() np.minimum(x,y) np.fmin() 元素级的最大值/最小值计算
np.mod(x,y) 元素级的模运算
np.copysign(x,y) 将数组y中各元素值的符号赋值给数组x对应元素
> < >= <= == != 算术比较,产生布尔型数组

生成目录

/[toc]开始时添加这个

标题

# 标题:从#到######一共六级,#越多字体越小,一般我使用三级标题。

列表

/1. 这是第一点, 有序列表,/为转义字符

/- 这是第一点, 无序列表

  1. first list
  • second list

代码

import os,当行代码

/``` python,多行代码

1
2
import os
print('Hellom Markdown')

/```

一些常用格式

斜体粗体下划线删除线,这几种格式看快捷键

引用: /> 引用内容

这是一段引用

链接:/[文本名]/(网站位置)

谷歌搜索

插入图片:/![评论]/(网址)

谷歌搜索中的一张图

分割线:/—

表格

/|吸附位点|吸附能|吸附位置|

/|1|2|3|

吸附位点 吸附能 吸附位置
1 2 3
4 5 6
7 8 9

一些小问题

  • Mac OS数字1左边的”`”需要在英文输入法下才可以打出来
  • 大部分的符号都要在英文输入法下才有效

博士生学历真的很重要吗?

用讲道理的方式去说服一个人接受你的观点,通常是很难的,那我就讲讲自己的故事吧,很长,要表达的,都在里面了。

阅读全文 »