简单说明:
Numpy:Python科学计算的核心库,提供高性能的多维数组对象和大量的函数,影响深度学习(pyTorch,TensorFlow).
matplotlib:用于绘图和数据可视化的基础包
Pandas:用于数据处理
*数据分析环境:*Anaconda+Jupyter notebook
直接在下面网址下载需要的环境进行安装即可
Anaconda下载
在命令行输入:jupyter notebook显示如下内容表示安装成功
Jupyter 是基于网页进行交互式开发的程序,可以展示全过程计算,开发,文档编写,运行代码,结果展示等
环境搭建好之后开始我们第一个知识点Numoy的知识理论内容
Numpy知识点
官方介绍:NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
官方给的功能:
- 一个强大的N维数组对象 ndarray
- 广播功能函数
- 整合 C/C++/Fortran 代码的工具
- 线性代数、傅里叶变换、随机数生成等功能
numpy ndarray对象
numpy创建了一个n维数组对象ndarray,这是一个相同类型元素的数组集合,每个数组元素占有大小相同的内存块。ndarray采用了索引机制,将数组中的每个元素映射到内存块上,按照一定的布局进行排序。
创建ndarray: Numpy通过内置函数array()可以创建ndarray对象
语法格式:
numpy.array(object, dtype = None, copy = True, order = None,subok=False,ndmin = 0)
序号 参数 描述说明
1 object 表示一个数组序列。
2 dtype 可选参数,通过它可以更改数组的数据类型。
3 copy 可选参数,表示数组能否被复制,默认是 True。
4 ndmin 用于指定数组的维度。
5 subok 可选参数,类型为bool值,默认False。为True,使用object的内部数据类型;False:使用object数组的数据类型。
- object
import numpy as np
np.array([1,2,3])
np.array((1,2,3))
np.array(range(1,4))
#生成器
np.array([i**2 for i in range(10)])
#array()函数,括号内可以是列表、元祖、数组、迭代对象,生成器等,元素类型也可以不一样
- dtype 设置数据类型
np.array([1,2,3],dtype='uint8')
- copy 设置数组可不可以被复制
#默认是可以复制,复制之后的id和原来的不是一个
np.array([1,2,3],copy=True)
- ndmin 设置数组的维度
np.array([1,2,3],ndmin=3)
- subok 是否要保持原来的类型
#创建矩阵
#既要复制一份副本,又要保持原类型
a = np.mat([1,2,3,4])
a_copy = np.array(a,subok=True)
*注意复制数组:只要是不使用=都不是指向同一个数据的引用,三种数据复制方式
- a = np.array(b)
- a = b.copy
- a = b
arange()生成区间数组
numpy.arange(start, stop, step, dtype)
参数说明
序号 参数 描述说明
1 start 起始值,默认为0
2 stop 终止值(不包含)
3 step 步长,默认为1
4 dtype 返回ndarray的数据类型,如果没有提供,则会使用输入数据的类型。
#创建一个0-9的数字,注意可以使用浮点数
np.array(10)
#可以指定数据类型
np,array(10,dtype='float')
#指定起始,终止,步长
np.array(2,5,2)
np.array(20,step=2)
linspace() 创建等差数列
返回在间隔[开始,停止]上计算的num个均匀间隔的样本。
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
参数说明
序号 参数 描述说明
1 start 必填项,序列的起始值,
2 stop 必填项,序列的终止值,如果endpoint为true,该值包含于数列中
3 num 要生成的等步长的样本数量,默认为50
4 endpoint 该值为 true 时,数列中包含stop值,反之不包含,默认是True。
5 retstep 如果为 True 时,生成的数组中会显示间距,反之不显示。
6 dtype ndarray 的数据类型
#起点1,终点5,样本数量5个
np.linspace(1,5,5)
#起点1,终点5,不包含5,显示步长,此时默认数据为50
np.linspace(1,5,endpoint=False,retstep=True)
等比数列logspace() 返回在间隔[开始,停止]上计算的num个均匀间隔的样本。
np.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None)
参数说明
序号 参数 描述说明
1 start 必填项,序列的起始值,
2 stop 必填项,序列的终止值,如果endpoint为true,该值包含于数列中
3 num 要生成的等步长的样本数量,默认为50
4 endpoint 该值为 true 时,数列中包含stop值,反之不包含,默认是True。
5 base 对数 log 的底数
6 dtype ndarray 的数据类型
#开始基数的0次幂 终止10次幂 基数为2 显示10个数,不包含尾数(另一种理解方式:将0-10分割成10个数,然后分别计算基数次幂)
np.logspace(0,10,10,,endpoint = False,base = 2)
全零数列zeros():创建指定大小的数组,数组元素以 0 来填充
numpy.zeros(shape, dtype = float, order = ‘C’)
参数说明
序号 参数 描述说明
1 shape 数组形状
2 dtype 数据类型,可选
#一维的5个0,默认数据类型为5个0
np.zeros(5)
#设置数据类型为int,5行5列
np.zeros((5,5),dtype='int')
#zeros_like返回具有与给定数组相同的形状和类型的零数组
ar1 = np.array([[1,2,3],[4,5,6]])
np.zeros_like(ar1)
结果
array([[0, 0, 0],
[0, 0, 0]])
全1数量ones()(同全零数列)
NumPy 数组属性
NumPy 的数组中比较重要 ndarray 对象属性有:
属性 说明
ndarray.ndim 秩,即轴的数量或维度的数量
ndarray.shape 数组的维度,对于矩阵,n 行 m 列
ndarray.size 数组元素的总个数,相当于 .shape 中 n*m 的值
ndarray.dtype ndarray 对象的元素类型
ndarray.itemsize ndarray 对象中每个元素的大小,以字节为单位
调整维度 reshape:可以调整维度
a = np.array([1,2,3,4])
a.reshape((2,2))
结果是:
array([[1, 2],
[3, 4]])
调整维度 resize:
# a 为2行2列
a=np.array([
[0,1],
[2,3]
])
# 一a为原数组创建2行3列的新数组
b_2_3 = np.resize(a,(2,10))
b_2_3
切片索引和统计函数
ndarray对象的内容可以通过索引或切片来访问和修改,与 Python 中 list 的切片操作一样。
一维数组
冒号 : 的解释:如果只放置一个参数,
如 [2],将返回与该索引相对应的单个元素。
如果为 [2:],表示从该索引开始以后的所有项都将被提取。
如果使用了两个参数,如 [2:7],那么则提取两个索引(不包括停止索引)之间的项。
#创建0-9的连续数字
import numpy as np
a = np.arange(0,10)
#截取2到7,间隔为2
a[2:7:2]
#上面这种情况可以直接是:np.arange(2,7,2)直接得出结果
二维数组
和一维数组的取数方法基本一致,示例如下:
#创建一个4行5列的二维数组
a = np.arange(20).reshape((4,5))
print(a)
结果是:
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]]
#查看维数(秩)
a.ndim
#二维数组下若为一个数字,则表示某一行数字(一维)
#展示[5,6,7,8,9]可以以使用
a[1]
#展示二维数组下某个具体的值,先取一维的某行再取某个具体的值
a[3][2] #结果是=17
a[1:] #取得第2行到最后一行
#!!下面这种情况可以这样理解:先取所有的数据,然后再取某行的数据
a[:][0:2]
在行的位置可以使用…省略
a[...,2] #会取得第三列数据
a[...,2:] #会取得第三列之后的所有数据
索引的高级操作:
- 整数数组索引
#创建4行5列的数据
a = np.arange(20).reshape(4,5)
b = a[[1,2,3],
[1,0,2]
]
#结果是b的数据是取得(1,1)(2,0)(3,2)的数据
- 布尔数组索引
当输出的结果需要经过布尔运算(如比较运算)时,此时会使用到另一种高级索引方式,即布尔数组索引
筛选出指定区间内数据
& 和
| 或
#创建一个2行3列的数据
a = np.array([[2,3,5],[2,6,5]])
#取数组中的大于3的数据
a[a>3]
#取出数组中的大于2小于6的数据
a[a>2 & a < 6]
广播机制
广播机制是针对不同的形状数组进行计算而设计的一种运算方式。
核心运算规则:
两个数组右对齐以后,对应维度里的数值要么相等,要么有一个为1,要么缺失取大值。 除此之外就会报错。像下面的两个数组就不能做运算。
统计函数
- 求平均值mean()
data = np.arange(20).reshape((4,5))
data.mean()
结果:
[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]]
9.5
#如果想计算某个方向(某个轴)的平均值可以使用axis,上->下axis=0,左->右axis=1
data.mean(axis=0) #结果是array([ 7.5, 8.5, 9.5, 10.5, 11.5])
中位数np.median()
data = np.array([1,2,3,4,5])
np.median(data)
结果是:3
标准差ndarray.std()
data = np.array([95,85,75,65,55,45])
data.std()
结果是17.07825127659933
方差ndarray.var()
标准差的平方是方差
data = np.array([95,85,75,65,55,45])
data.var()
结果是:291.6666666666667
求最大值ndarray.max()/ndarray.min()
data = np.array([1,2,3,4,5])
data.max()
结果是:5
#同理也可以求某个方向上的最大值/最小值axis=0或者1即可
求和 ndarray.sum()
data = np.array([1,2,3,4,5])
data.sum()
结果是:15
#同理也可以求某个方向上的和axis=0或者1即可
加权平均值 numpy.average()
即将各数值乘以相应的权数,然后加总求和得到总体值,再除以总的单位数
numpy.average(a, axis=None, weights=None, returned=False)
计算方程式:
avg = sum(a * weights) / sum(weights)
数据类型
操作文件:loadtxt读取txt文本、、csv文件
loadtxt(fname, dtype=<type ‘float’>, comments=‘#’, delimiter=None, converters=None, skiprows=0, usecols=None, unpack=False, ndmin=0,encoding=‘bytes’)
参数:
fname:指定文件名称或字符串。支持压缩文件,包括gz、bz格式。
dtype:数据类型。 默认float。
comments:字符串或字符串组成的列表。表示注释字符集开始的标志,默认为#。
delimiter:字符串。分隔符。
converters:字典。将特定列的数据转换为字典中对应的函数的浮点型数据。例如将空值转换为0,默认为空。
skiprows:跳过特定行数据。例如跳过前1行(可能是标题或注释)。默认为0。
usecols:元组。用来指定要读取数据的列,第一列为0。例如(1, 3, 5),默认为空。
unpack:布尔型。指定是否转置数组,如果为真则转置,默认为False。
ndmin:整数型。指定返回的数组至少包含特定维度的数组。值域为0、1、2,默认为0。
encoding:编码, 确认文件是gbk还是utf-8 格式
返回:从文件中读取的数组。
#numpy读取.csv文件中的内容
import numpy as np
#使用loadtxt方法,数据类型是i4,分隔符是,
data = np.loadtxt('test.csv',dtype=np.int32,delimiter=',')
print(data,data.shape)
#此时就可以展示文件数据中的内容
可以自定义数据类型
#文件中的内容可以自己定义数据格式
data_title = np.dtype([('name','str'),('age','uint8'),('gender','U1')])
data = np.loadtxt('info.csv',dtype=data_title ,delimiter=',',skiprows=1, encoding='utf-8')
#此时就可以通过索引名称取数据,获取信息内容的age,可以求得平均值,最大值,最小值等
ages = data['age']
ages.max()
ages.min()
ages.mean()
随机函数:产生特定分布的随机数,如正态分布等
-
numpy.random.rand(d0,d1,…,dn)
rand函数根据给定维度生成[0,1)之间的数据,包含0,不包含1 dn表示每个维度 返回值为指定维度的array
#随机产生一个2行4列的二位数字0-1之间
np.random.rand(2,4)
([[0.63029277, 0.79480643, 0.53937797, 0.65152899],
[0.305966 , 0.5356668 , 0.06207485, 0.3839093 ]])
-
numpy.random.randint(low, high=None, size=None, dtype=’l’)
返回随机整数,范围区间为[low,high),包含low,不包含high 参数:low为最小值,high为最大值,size为数组维度大小,dtype为数据类型,默认的数据类型是np.int high没有填写时,默认生成随机数的范围是[0,low)
#随机产生5-20之间的3行4列二维数组
np.random.randint(5,21,(3,4))
[[ 7, 19, 10, 19],
[12, 5, 12, 18],
[10, 16, 9, 12]]
- numpy.random.sample(size=None)
返回半开区间内的随机浮点数[0.0,1.0]。
#范围一个2块3行4列的三维数组[0.0,1.0]之间
np.random.sample((2,3,4))
[[[0.173972 , 0.600794 , 0.65167046, 0.24024349],
[0.03844569, 0.52958462, 0.74761613, 0.74137381],
[0.54508302, 0.680926 , 0.07978446, 0.81980104]],
[[0.36661542, 0.05358651, 0.22395614, 0.54512484],
[0.74150273, 0.85390898, 0.94689098, 0.04491626],
[0.74536013, 0.4472514 , 0.76745321, 0.39144286]]]
随机种子np.random.seed():使用随机数种子每次产生的数据都是一样的,可以进行预测内容
#设置随机数种子为2
np.random.seed(2)
np.random.rand2(2,2)
每次的运行结果都是一样的
[[-0.41675785, -0.05626683],
[-2.1361961 , 1.64027081]]
正态分布:numpy.random.normal(loc=0.0, scale=1.0, size=None)
作用:返回一个由size指定形状的数组,数组中的值服从 μ=loc,σ=scale 的正态分布。
参数:
loc : float型或者float型的类数组对象,指定均值 μ
scale : float型或者float型的类数组对象,指定标准差 σ
size : int型或者int型的元组,指定了数组的形状。如果不提供size,且loc和scale为标量(不是类数组对象),则返回一个服从该分布的随机数。
# 标准正态分布,3行2列
a = np.random.normal(0, 1, (3, 2))
numpy.resize()
numpy.resize(arr, shape)
numpy.resize() 返回指定形状的新数组。
numpy.resize(arr,shape) 和ndarray.resize(shape, refcheck=False)区别:
numpy.resize(arr,shape),有返回值,返回复制内容.如果维度不够,会使用原数组数据补齐
ndarray.resize(shape, refcheck=False),修改原数组,不会返回数据,如果维度不够,会使用0补齐
a = np.array([[1,2,3],
[4,5,6]])
b = np.resize(a,(3,3))
a.resize(3,3)
a:[[1 2 3]
[4 5 6]
[0 0 0]]
b:[[1 2 3]
[4 5 6]
[1 2 3]]
numpy.append():
在数组的末尾添加值,默认返回一个一维数组。
numpy.append(arr, values, axis=None)
参数说明:
arr:输入的数组;
values:向 arr 数组中添加的值,需要和 arr 数组的形状保持一致;
axis:默认为 None,返回的是一维数组;当 axis =0 时,追加的值会被添加到行,而列数保持不变,若 axis=1 则与其恰好相反。
a = np.array([[1,2,3],
[4,5,6]])
a = np.append(a,[[7,8,9]],axis=0)
np.append(a, [[5,5,5],[7,8,9]],axis = 1)
[[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
[[1 2 3 5 5 5]
[4 5 6 7 8 9]]
numpy.insert():表示沿指定的轴,在给定索引值的前一个位置插入相应的值,如果没有提供轴,则输入数组被展开为一维数组。
numpy.insert(arr, obj, values, axis)
参数说明:
arr:要输入的数组
obj:表示索引值,在该索引值之前插入 values 值;
values:要插入的值;
axis:指定的轴,如果未提供,则输入数组会被展开为一维数组。
a = np.array([[1,2,3],
[4,5,6]])
np.insert(a,1,[7,8,9],axis=0)
[[1, 2, 3],
[7, 8, 9],
[4, 5, 6]]
numpy.delete():
该方法表示从输入数组中删除指定的子数组,并返回一个新数组。它与 insert() 函数相似,若不提供 axis 参数,则输入数组被展开为一维数组。 numpy.delete(arr, obj, axis) 参数说明:
arr:要输入的数组;
obj:整数或者整数数组,表示要被删除数组元素或者子数组;
axis:沿着哪条轴删除子数组。
a = np.array([[1,2,3],
[4,5,6]])
np.delete(a,1,axis=0)
[[1 2 3]]
numpy.argwhere():该函数返回数组中非 0 元素的索引,若是多维数组则返回行、列索引组成的索引坐标。
a = np.array([[1,2,3],
[4,5,6]])
print(np.argwhere(a > 2))
数组中大于2的数字下标按照行进行列举
[[0 2]
[1 0]
[1 1]
[1 2]]
numpy.unique()
用于删除数组中重复的元素,其语法格式如下: numpy.unique(arr, return_index, return_inverse, return_counts)
参数说明:
arr:输入数组,若是多维数组则以一维数组形式展开;
return_index:如果为 True,则返回新数组元素在原数组中的位置(索引);
return_inverse:如果为 True,则返回原数组元素在新数组中的位置(索引);
return_counts:如果为 True,则返回去重后的数组元素在原数组中出现的次数。
a = np.array([[1,2,3],
[4,5,6]])
np.unique(a,return_inverse=True)
(array([1, 2, 3, 4, 5, 6]), array([0, 1, 2, 3, 4, 5], dtype=int64))
numpy.sort():
对输入数组执行排序,并返回一个数组副本。 numpy.sort(a, axis, kind, order)
参数说明:
a:要排序的数组;
axis:沿着指定轴进行排序,如果没有指定 axis,默认在最后一个轴上排序,若 axis=0 表示按列排序,axis=1 表示按行排序;
kind:默认为 quicksort(快速排序);
order:若数组设置了字段,则 order 表示要排序的字段。
a = np.array([[1,5,3],[3.9,7]
])
np.sort(a)
np.sort(a,axis=1)
[[1, 3, 5],
[3, 7, 9]]
[[1, 3, 5],
[3, 7, 9]]
numpy.argsort():argsort() 沿着指定的轴,对输入数组的元素值进行排序,并返回排序后的元素索引数组。示例如下:
a = np.array([90, 29, 89, 12])
np.argsort()
[3 1 2 0]