numpy数值分析与计算操作
话不多说,上代码吧!
1.创建数组
##创建一维数组
nd2=np.array([12,25,25,366,54,85,69])#
print(nd2) #
#创建二维数组
nd=np.array([[12,25,34],[34,43,23],[23,34,34]])#
print(nd)
上述代码即为创建数组的代码,可以创建一维数组,二维数组或者三维数组,看你需要数据的结构而定
注:np.array函数中有一个参数dtype可以对其进行赋值,来决定数据的类型
2.得到数组相应的信息
print(type(nd))
print(nd.shape)
arr3=np.array([[1,2],[1,5,2]])
print(arr3)
print(arr3.shape)#数组维度
print("nd维度:",nd.ndim)
print("nd2维度:",nd2.ndim)
#元素个数
print(nd2.size)
print(nd.size)
#元素类型
print(nd2.dtype)
print(nd.dtype)
上述代码将之前创建的数组信息输出
分别是
数组的结构、维度、元素个数、元素类型
3.重置数组结构
rnd=np.array(np.random.rand(24))
print(rnd)
print(rnd.shape)
rnd.shape=6,4
print(rnd)
上面用到了对数组的shapes重新赋值的方法,就可以对数组的结构重构,重构时要注意结构要对应
4.使用函数创建数组
#使用函数创建数组
print(np.ones(shape=(2,3,6)))
print(np.zeros(shape=(2,3,6)))
print(np.full((2,3,6),5))
print(np.eye(6))
print(np.diag([5,6,47,5,6]))#arange函数
ar=np.arange(60).reshape(6,10)
print(ar)#linspace#等差数列,返回固定范围固定数量的数组
ln=np.linspace(1,20,100).reshape(5,20)
print(ln)#生成随机数
r1=np.random.random(20)#0-1之间随机数
print(rl)
c=np.random.randint(1,50,(8,12))
上述代码分别用到了几个函数
np.ones(shape)创建一个全是 1 的结构为shape的数组
np.zeros(shape)创建一个全是 0 的结构为shape的数组
np.full((2,3,6),5)创建一个结构为2,3,5数值全为5的数组
np.eye(6)创建一个6X6的单位矩阵
np.diag([5,6,47,5,6])创建一个对角矩阵
np.arange(60) 创建等差数组,默认为1,如np.arange(2,80,5)初始值为2终点为80,差为5
其他几个上面有注释,同时也与前面说的类似就不解释了
5.数组索引和数组展平和堆叠
#二维数组索引
r=np.random.randint(1,60,(4,6))
print(r)
print(r[1:2,3:5])#行列操作
print(r[::2,::3])
#变换数组形态
print(r.flatten())#横向展平 #reshape ,重塑数组维度
r2=np.random.randint(1,30,(4,6))
r3=np.hstack((r,r2))#横向堆叠
print(r3)r4=np.vstack((r,r2))#纵向堆叠
print(r4)
上述代码分别对应数组的展平,横向堆叠,纵向堆叠
数组的索引则为(r[1:2,3:5]
1:2针对行,3:5针对列,作用形式和常用的range参数作用形式差不多
重点部分统计分析方法,数值统计
6.排序
排序arr2=np.array([0,5,3,4,6,3,4,85,3,5,3,4,5])
arr2.sort()#无返回值
print(arr2)
arr3=np.array([[45,36,45,32,55,21,54,56],[12,45,3,53,5,863,32,52]])
arr3.sort()
print(arr3)
arr3.sort(axis=0)
print(arr3)
print(arr2.argsort())
通过sort对数组排序无返回值,直接在原数组上修改,所以要注意保护数据
可以通过reverse=True/False传递参数决定是正序排序还是反序排序,True代表正序,False反序,也可能我记错了,你试试就行,哈哈
arr2.argsort()则是放回排序的下标,也可以指定排序的方式
7.去重和重复
#去重
print(np.unique(arr2)) #重复
print(np.tile(arr2,2))
print(np.tile(arr3,2))
#对元素进行重复
print(arr2.repeat(2,axis=0))
print(arr3.repeat(2,axis=0))
np.unique可以对数组去重
np.title可以对整个对象进行重复
ndarray对象则可以通过repeat对元素进行重复,axis=0代表列重复,axis=1代表行重复
重点
8.统计函数
#sum函数
arr_z=np.random.randint(0,8,(6,10))
print(arr_z)
print(arr_z.sum())
print(arr_z.sum(axis=0))#纵向
print(arr_z.sum(axis=1))
#mean均值函数
print(arr_z.mean())#将近多少?
print(arr_z.mean(axis=0))#纵向
print(arr_z.mean(axis=1))
#标准差
print(arr_z.std())#将近多少?
print(arr_z.std(axis=0))#纵向
print(arr_z.std(axis=1))
#方差
print(arr_z.var())#将近多少?
print(arr_z.var(axis=0))#纵向
print(arr_z.var(axis=1))
#协方差
print(arr_z.corrcoef())#将近多少?
print(np.corrcoef(arr_z))#纵向
print(np.corrcoef(arr_z,axis=0))
print(np.cov(arr_z))#行为基准
#最大值
print(arr_z.max())#将近多少?
print(arr_z.max(axis=0))#纵向
print(arr_z.max(axis=1))
#最小值
print(arr_z.min())#将近多少?
print(arr_z.min(axis=0))#纵向
print(arr_z.min(axis=1))
#最大值索引
print(arr_z.argmin())#将近多少?
print(arr_z.argmin(axis=0))#纵向
print(arr_z.argmin(axis=1))#
print(arr_z[:,arr_z.argmin(axis=1)])
#累计积
print(arr_z.cumprod())#将近多少?
print(arr_z.cumprod(axis=0))#纵向
print(arr_z.cumprod(axis=1))
#累积和
print(arr_z.cumsum())#将近多少?
print(arr_z.cumsum(axis=0))#纵向
print(arr_z.cumsum(axis=1))
上面用到了很多函数,事实上方法都差不读,当你不对axis传递参数时,函数的作用域时整个数组不论是一维数组还是二维三维数组,
当传递参数为0时,对于二维数组,以列为基础进行操作,为1时,以行为基础操作
9.person系数
np.corrcoef(arr_z)
使用np.corrcoef(a)可计算行与行之间的相关系数,np.corrcoef(a,rowvar=0)用于计算各列之间的相关系数,输出为相关系数矩阵。
10.一个简单绘图,构建自己的随机数据
r1=np.random.random(20)#0-1之间随机数
print(r1)
r1=np.sort(r1)
y1=r1*2+3
y2=r1*2+3+np.random.uniform(-1,1,20) plt.figure(figsize=(8,5))
plt.plot(r1,y1,c='b')
plt.scatter(r1,y2,c='r',s=5)
plt.show()
结构如果所示
通过np.random,我们呢构建随机数