一.Numpy简介
Numpy是用于数据科学计算的基础,不但能够完成科学计算任务,还能被用作高效的多维数据容器。用于存储和处理大型矩阵。
Python提供了一个array模块,和list不同,它直接保存数值,但是由于Python的array模块不支持多维,也没有各种运算函数。
Numpy弥补了这一遗憾,Numpy提供了一种存储单一数据类型的多维数组-----ndarray
二.创建数组对象
1.创建数组:
#一维数组:
arr1 = np.array([1,2,3])
#二维数组:
arr2 = np.array([[1,2,3],[4,5,6],[7,8,9]])
2.数组属性:ndarray(数组)是存储单一数据类型的多维数组
ndim:返回int 表示数组的维数
shape:返回tuple 表示数组的形状
size:返回int 表示数组的元素总数
dtype:返回data-type 描述数组中元素的类型
itemsize:返回int 表示数组的每个元素的大小
3.通过函数创建数组对象
(1)等差数组
np.linespace(0,1,12) #开始值,终止值,元素个数
(2)等比数组
np.logspace(0,2,20) #生成10的0次方-10的2次方的20个等比数组
(3)全零数组
np.zeros((2,3))
(4)单位数组
np.eye(3)
(5)对角数组
np.diag([1,2,3,4])
(6)全一数组
np.ones((5,3))
(7)arange()
np.arange(0,1,0.1) #初始值 终止值 步长 一维数组
三、生成随机数组
1、random.random()
用于生成一个0-1的随机浮点数 0<=n<1.0
2、np.random.rand(10,5)
生成服从均匀分布的随机数[0,1)
3、np.random.randn(10,5)
生成服从正态分布的随机数
4、np.random.randint()
生成随机整数
四、通过索引访问数组
1、一维数组的索引
arr[3:5] 作为下标获取数组的一个切片 包括3 不包括5
arr[:5] 作为下标获取数组的切片 从0开始 取到4
arr[-1] 下标可以使用负数,-1表示从数组后往前数的第一个元素
2、多维数组的索引
arr[0,3:5] #[行所在下标,列所在下标]
arr[(0,1,2),(1,2,3)] #通过坐标确定位置
五、变换数组的形态
1、改变数组形状
arr = np.arange(12) #创建一维数组 [0,1,2,3,4,5,6,7,8,9,10,11]
arr.reshape(3,4) #设置数组的形状
生成一个3*4的二维数组
2、使用ravel函数展平数组
arr = np.arange(12).reshape(3,4) #创建一个二维数组
创建的二维数组为:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
arr.ravel() #数组展平
展平后的数组为:
[ 0 1 2 3 4 5 6 7 8 9 10 11]
3、使用flatten函数展平数组
arr.flatten() #横向展平
[ 0 1 2 3 4 5 6 7 8 9 10 11]
arr.flatten('F') #纵向展平
[ 0 4 8 1 5 9 2 6 10 3 7 11]
4、组合数组
一维、多维数组组合:
使用hstack函数实现数组横向组合:np.hstack(arr1,arr2)
使用vstack函数实现数组纵向组合:np.vstack(arr1,arr2)
多维数组组合:
使用concatenate函数实现数组横向组合:np.concatenate((arr1,arr2),axis=1)
使用concatenate函数实现数组纵向组合:np.concatenate((arr1,arr2),axis=0)
5、切割数组
使用hsplit函数实现数组横向分割: np.hsplit(arr1,arr2)
使用vsplit函数实现数组纵向分割: np.vsplit(arr1,arr2)
使用split函数实现数组横向分割: np.split((arr1,arr2),axis=1)
使用split函数实现数组纵向分割: np.split((arr1,arr2),axis=0)
六、创建NumPy矩阵
1、创建与组合矩阵
使用mat函数创建矩阵:
matr1 = np.mat("1 2 3;4 5 6;7 8 9")
使用bmat函数合成矩阵:
np.bmat("arr1 arr2;arr1 arr2")
2、矩阵的运算
矩阵与数相乘: matr1*3
矩阵相加减: matr1+/-matr2
矩阵相乘:matr1 * matr2
矩阵对应元素相乘:np.multply(matr1,matr2)
矩阵特有属性:
matr1.T 返回自身的转置
matr1.H 返回自身的共轭转置
matr1.I 返回自身的逆矩阵
matr1.A 返回自身数据的二维数组的一个视图
3、全称通用函数
是一种能够对数组中所有元素进行操作的函数
四则运算:+ - * /
比较运算:> < >= <= != 比较运算返回的是布尔值
逻辑运算: np.any 表示逻辑 or np.all 表示逻辑 and 运算结果返回布尔值
4、ufunc函数的广播机制
广播:是指不同形状的数组之间执行算术运算的方式。需要遵循4个原则
让所有输入数组都向其中shape最长的数组看齐,shape中不足的部分都通过在前面加1补齐
输出数组的shape是输入数组shape的各个轴上的最大值
如果输入数组的某个轴和输出数组的对应轴的长度相同或者其长度为1时,这个数组能够用来计算,否则出错
当输入数组的某个轴的长度为1时,沿着刺轴运算时都用此轴上的第一组值
1、一维数组的广播机制
x = np.array([[1,3,5],[1,1,1],[2,2,2],[3,3,3]])
y = np.array([2,4,3])
print(x+y)
六、利用numpy进行统计分析
1、numpy文件读写
主要有二进制文件的读写和文件列表形式的数据读写两种形式
save函数是以二进制的格式保存数据: np.save('arr_data',arr)
load函数是以二进制的文件中读取数据: np.load("arr_data")
savez函数可以将多个数组保存到一个文件中: np.savez('arr_datas',arr1,arr2)
存储时可以省略扩展名,但读取时不能圣罗扩展名
2、numpy读取文本格式的数据(TXT CSV格式)
1.savetet函数是将数组写到某种分隔符隔开的文本文件中
np.savatxt('../tmp/arr.txt',arr,fmt='%d',delimiter=',')
#fmt = '%d' 表示保存为整数 delimiter=',' 表示用逗号隔开
2.loadtxt函数执行的是把文件加载到一个二维数组中
np.loadtxt('../tmp/arr.txt',delimiter=',')
3.genfromtxt函数面向的是结构化数组和确实数据
np.genfromtxt('../tmp/arr.txt'delimiter=',')
3、使用数组进行简单统计分析
1、直接排序
sort函数是最常用的排序方法 arr.sort()
sort函数也可以指定一个axis参数,使得sort函数可以沿着指定轴对数据集进行排序。
axis=1为沿横轴排序。 axis=0为沿纵轴排序
2.间接排序
argsort() 函数返回值为重新排序值得下标 arr.argsort()
3、去除重复数据
通过unique()函数可以找出数组中的唯一值并返回已排序的结果
tile()函数主要有两个参数,参数A 指定重复的数组,参数reps指定重复的次数
np.tile(A,reps)
repeat()函数主要有三个参数,参数‘a’是需要重复的数组元素,参数‘repeats’是重复次数,参数‘axis’指定沿着哪个轴进行重复,axis=0表示按行进行元素重复 axis=1 表示按列进行元素重复
numpy.repeat(a,repeats,axis=None)
4、统计函数
sum 数组和 mean 数组均值 std 数组标准差 var 数据方差
min 最小值 max 最大值 argmin最小元素的索引 argmax 最大元素索引
cumsum 所有元素累计和 cumprod 累计积