1. 掌握NumPy数组对象ndarray
1.1 创建数组对象
#ndarray是储存单一数据类型的多维数组
#数组创建
import numpy as np
arr1=np.array([1,2,3,4])
arr2=np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
#数组属性
print(arr2.ndim)
print(arr2.shape)
print(arr2.dtype)
print(arr2.size)
print(arr2.itemsize)
arr2.shape=4,3 #重新设置shape
#使用arange函数创建0~1之间步长为0.1的数字
np.arange(0,1,0.1)
#使用linspace函数创建0~1之间的12个数字
np.linspace(0,1,12)
#使用logspace函数创建等比数列
np.logspace(0,2,20)
#使用zeros函数创建全零数组
np.zeros(2,3)
#使用eye函数创建单位矩阵
np.eye(3)
#使用diag函数创建只包含主对角线元素的数组
np.diag([1,2,3,4])
#使用ones函数创建全一数组
np.ones((5,3))
#数组类型转换
np.float64(42)
np.int8(42.0)
np.bool(42)
#创建数据类型并用其创建数组
df=np.dtype([("name",np.str_,40),("numitems",np.int64),("price",np.float64)])
itemz=np.array([("tomatoes",42,4.14),("cabbages",13,1.72)],dtype=df)
1.2 生成随机数
#无约束条件下的随机数 arr=np.random.random(100) #服从均匀分布的随机数 arr=np.random.rand(10,5) #服从正态分布的随机数 arr=np.random.randn(10,5) #给定范围的随机数 arr=np.random.randint(2,10,size=[2,5]) #其他常用模块 #np.random.xx #xx=seed,permutation,shuffle,binomial(二项分布),normal(正态高斯分布),beta,chisquare(卡方),gamma,uniform(在[0,1)均匀分布)
1.3 通过索引访问数组
#一维数组的索引 arr=np.arange(10) print(arr[5]) print(arr[3:5]) print(arr[:5]) print(arr[1:-1:2]) print(arr[5:1:-2]) #二维数组的索引 arr=np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]]) print(arr[0,3:5]) print(arr[1:,2:]) print(arr[:,2]) print(arr[(0,1,2),(1,2,3)]) mask=np.array([1,0,1],dtype=np.bool) #按照1出现的位置,表示索引arr数组的第0、2行 # mask,2表示索引第0、2行第2列的所有元素 print(arr[mask,2])
1.3 变换数组的形态
arr=np.arange(12)
#使用reshape函数设置数组形状,默认按照行顺序
np.reshape(3,4)
print(np.reshape(3,4).ndim)
#使用ravel函数展平数组,默认按照行顺序
arr.ravel()
#使用flatten函数展平数组
arr.flatten #横向展平
arr.flatten('F') #纵向展平
#使用hstack函数横向组合数组
np.hstack((arr1,arr2))
#使用vstack函数总想组合数组
np.vstack((arr1,arr2))
#使用concatenate函数组合数组
np.concatenate((arr1,arr2),axis=0,out=None) #纵向(默认)
np.concatenate((arr1,arr2),axis=1,out=None) #横向行拼接
#使用hsplit函数横向分割数组
np.hsplit(arr,2)
#使用vsplit函数纵向分割数组
np.vsplit(arr,2)
#使用split函数分割数组
np.split(arr,2,axis=1) #横向分割
np.split(arr,2,axis=0) #纵向分割
2. 掌握NumPy矩阵与通用函数
2.1 创建NumPy矩阵
#使用mat函数创建矩阵
matr1=np.mat("1 2 3;4 5 6;7 8 9")
#使用matrix函数创建矩阵
matr2=np.matrix([123],[456],[789])
#使用bmat函数合成矩阵
arr1=np.eye(3)
arr2=3*arr1
matr3=np.bmat("arr1 arr2;arr1 arr2")
#矩阵运算
matr2=matr1*3
matr3=matr1+matr2
matr4=matr1-matr2
matr5=matr1*matr2 #矩阵相乘
matr6=np.multiply(matr1,matr2) #矩阵元素相乘
matr1.T #转置
matr1.H #共轭转置
matr1.I #逆矩阵
matr1.A #返回二维数组的视图
2.2 认识ufunc函数——能够对数组中所有元素进行操作
x=np.array([1,2,3]) y=np.array([4,5,6]) #四则运算 x+y x-y x*y x/y x**y #比较运算 xy x==y x>=y x<=y x!=y #逻辑运算 np.all(x==y) #全部都相等 np.any(x==y) #有一个就行 #注意ufunc的广播机制!!!
3. 利用NumPy进行统计分析
3.1 读写文件
#二进制格式
#save函数以二进制保存数据
np.save("d:/code/save_arr",arr)
#savez函数以二进制保存多个数组
np.savez("d:/code/save_arr",arr1,arr2)
#load函数以二进制读取数组
loaded_data=np.load("d:/code/save_arr.npz")
print(loaded_data['arr_0']) #会自动给数组命名'arr_0''arr_1'
arr1=np.array([1,2,3],[4,5,6])
arr2=np.arange(0,1.0,0.1)
np.savez("d:/code/save_arr",src1=arr1,src2=arr2) #给文件中的数组命名,就可以用新名字取出
print(loaded_data[src1])
#文本格式
#savetxt函数可以将数组写到某种分隔符隔开的文本文件中
np.savetxt("d:/code/arr.txt",arr,fmt="%d",delimiter=",") #fmt="%d"表示保存为整数
#loadtxt函数可以把文件加载到一个二维数组中
loaded_data=np.loadedtxt("d:/code/arr.txt",delimiter=",") #读写的delimiter要一致
#genfromtxt函数各异读取结构化数据和缺失数据的数组
loaded_data=np.genfromtxt("d:/code/arr.txt",delimiter=",")
3.2 使用数组进行简单统计分析
#(1)直接排序 #使用sort函数 arr.sort() arr.sort(axis=1,kind='quicksort',order=None) #横轴排序 arr.sort(axis=0,kind='quicksort',order=None) #纵轴排序 #(2)间接排序 #argsort函数返回重新排序后数值的索引(是索引!返回的是索引!!) arr.argsort(axis=0,kind='quicksort',order=None) #lexsort函数返回按照最后一个传入数据确定的排序顺序(以(a,b,c)的c为标准排序) arr.lexsort(axis=1,kind='quicksort',order=None) #(3)去重与重复数据 #unique函数可以找出数组中的唯一值并返回排序后的结果 names=np.array(['小明','小黄','小花','小明','小花','小兰','小白']) np.unique(names) #tile函数可以重复数据(对数组重复) arr=np.arange(5) np.tile(arr,3) #repeat函数可以重复数据(对元素重复) arr.repeat(2,axis=0) #按横轴重复元素 arr.repeat(2,axis=1) #按纵轴重复元素
3.3 常用的统计函数
arr.sum() arr.sum(axis=0) #按列轴求和,下面同理 arr.mean() arr.std() arr.var() arr.min() arr.max() arr.argmin() #数组最小元素的索引 arr.argmax() arr.cumsum() #所有元素的累计和 arr.cumprod()
3.4 任务实现



