Python数据分析——①numpy模块三大基础运用

一、模块介绍:

                python提供的能提供数组、矩阵。方程组运算的扩展库,简便快捷,运用为主

二、数组:array

        1.数组创建:

# 一、语法模板
import numpy as np
import random
# 2.创建数组
n=num=10
s=start=0
e=end=10
st=step=1
# 1.array() 可将list、tuple和 range()创建的生成器 转化为数组
test=np.array(([1,2,3],(1,2,3),range(1,4,1)))

# 2.arange(),参数与range相同
test=np.arange(s,e,st)

# 3.linspace(a,b,c,endpoint=True(默认)) 创建等差数组c为等差取的数的个数,endpoint默认为True范围为[a,b],False为[a,b)
test=np.linspace(s,e,st,endpoint=False)

# 4.logspace(a,b,c,base=10,endpoint=True) 等价于base**linspace(a,b,c,endpoint=True)
test=np.logspace(s,e,st,base=2,endpoint=False)

# 5.特殊数组创建
test=np.zeros(n)#0矩阵二维数组
test=np.ones(n)#1矩阵二维数组
test=np.identity(n)#单位矩阵二维数组
test=np.empty(n)#申请数组空间,不初始化
test=np.diag(range(10))#对角矩阵,主对角元素为传入的迭代对象

# 6.随机数组创建
test=np.random.rand(n)#n个[0,1)的随机数
test=np.random.randint(s,e,(n,n))#创建(n,n)数组,元素范围,[s,e)
test=np.random.standard_normal((n,n,n))#(n,n,n)元素用标准正态分布数随机赋值
print(test)

        2.数组元素修改:

n=num=10
s=start=0
e=end=10
st=step=1
test=np.array([range(s,e,st),range(e,s,-st),range(s,e,st)])
# 1,下标修改
print(test)
test[s]=1   #将行下标为s的数全部改为1
test[s,s]=2 #将下标为s,s的项改为2
# 2.多元素同时修改
test[1:,2:]=3   #将行标大于等于1列标大于等于2的项全部改为3
test[1:,2:]=range(8,0,-1)   #将下面两行都按所给元素赋值
test[1:,2:]=range(8,0,-1),range(2,10,1) #两行分别赋值
# 3.元素增加
np.append(test,[1,2,3])    #尾部增加元素,可以增加多个
np.insert(test,e,n)    #在下标为e的元素前插入n

        3.数组的运算:

# 3.数组的运算:
n=num=10
s=start=0
e=end=10
st=step=1
test=np.array([range(s,e,st),range(e,s,-st),range(s,e,st)])

# 1.数组与标量运算+ - * / ** % 可当除数与被除数,结果为新矩阵
test+=2
test=2/test

# 2.数组与数组运算
# 同型矩阵
test+=[range(s,e,st),range(s,e,st),range(s,e,st)]
# 非同型矩阵:广播运算  下标为i的元素与列表为i的元素相运算
test=range(10)*test

# 3.内积运算(数组向量(一维数组)点乘运算)
np.dot(np.array(range(s,e,st)),np.array(range(s,e,st)))

# 4.模块函数
np.sin(test)    #正弦余弦运算
np.log(test)    #对数运算
np.round(test)  #四舍五入
np.ceil(test)   #向上取整
    #分段函数
np.where(s6,test<2],[lambda test:test*2,lambda test:test*3]) #test>6的元素*2,<2的*3,其余的变为0,条件不限定

# 5.布尔运算
#np.isclose(test1,test2,rtol,atol)    #判断两个数组对应元素是否在误差范围内,返回bool数组#rtol相对误差,atol绝对误差
#np.allclose(test1,test2,rtol,atol)    #判断两个数组对应元素是否在误差范围内,返回bool值#rtol相对误差,atol绝对误差
print(test>1)   #输出判断后的bool值矩阵
print(test[test>1]) #输出元素大于1的项组成的数组
print(sum((test<2)&(test>1)))   #输出(1,2)之间的数的个数,(test<2)&(test>1)返回bool数组,sum求和
print(np.all(test>0))   #任意数是否大于0
print(np.any(test>0))   #是否存在数大于0
# *:a,b两个数组可由a[a>b]找到a>b的项
print(test)

        4.数组元素访问与排序等操作:

# 4.数组元素访问与排序等操作:
n=num=10
s=start=0
e=end=10
st=step=1
test=np.array([range(s,e,st),range(e,s,-st),range(s,e,st)])
# 1.下标访问
print(test[0])  #第1行元素
print(test[0][0])  #第1行第1列元素
print(test[0,4])  #第1行5列元素,等价于test[0][4]
print(test[[0,1]])  #第1,2行元素
print(test[[0,1],[0,1]])  #第1,2行的1,3列元素
# 2.切片访问
print(test[0][::-1])  #第1行逆序输出
print(test[0][::2])  #第1行间隔输出
print(test[0][:6])  #第一行取到下标为5的元素,不包括终点
print(test[0][:0])  #第一行取到下标为0的元素,不包括终点,即为空数组
print(test[::,1:4:2])  #取2,4列元素
# 3.数组排序
test=np.array([[1,3,7,32,2],[1,34,7,3,4]])
index_sort=np.argsort(test[1])  #numpy的排序函数,返回从小到大数的下标数组
print(test.argmax(),test.argmin()) #返回test的最大与最小值的下标,只有用np.array创造的数组才可调用
test.sort()  #python自带排序
# 4.改变数组形状 shape与size
print(test.shape)   #返回数组的形状
print(test.size)    #数组的大小
test.shape=(5,2)    #数组改为5行2列,数组元素应不变,-1表示自动计算行数:size/lines
test=test.reshape(2,5)    #rehape返回新数组,但修改的数组大小应不变
test=np.array([range(5),range(5)])
    # test.reshape(2,7)报错
test.resize(2,7)    #可更改数组大小,多余补0
test=np.resize(test,(3,10))  #np的resize等函数返回新数组,不改变原数组,多余的项补原数组元素
print(test)
# 5.数组堆叠与合并vstack() hstack() concatenate()
test1=np.arange(10).reshape(1,10) #创建两个数组
test2=np.arange(10).reshape(1,10)
print(np.vstack((test1,test2))) #垂直堆叠
print(np.hstack((test1,test2))) #水平堆叠

print(np.concatenate((test1,test2),axis=1))    #参数axis默认为0增加行,为1增加列

三、矩阵:matrix

        1.矩阵创建:

# 1.矩阵创建
n=10
s=0
e=10
st=1
# 1.生成矩阵 *:可迭代对象都可创建
test=np.matrix([range(10),range(10)[::-1],range(10)])
# 2.访问矩阵元素
print(test[1,1])
print(test)

        2.矩阵相关的操作(转置、逆、特征值获取):

# 2.矩阵相关操作
n=10
s=0
e=10
st=1
test=np.matrix([range(10),range(10)[::-1],range(10)])
# 1.矩阵转置:.T返回转置矩阵
print(test.T)
# 2.矩阵求逆(方阵才有逆矩阵)   与逆矩阵相乘得到的矩阵近似为单位矩阵
test1=np.matrix([[1,2,3],[2,3,5],[4,12,6]])
test2=np.linalg.inv(test1)
print(test1,test2,test2*test1,test1*test2,sep="\n")
# 3.特征值获得:
print(test.mean())    #矩阵的平均值
print(test.mean(axis=0))    #矩阵每列的平均值
print(test.mean(axis=0).shape)    #axis=0时为求纵向平均值,此时矩阵只有一行
print(test.mean(axis=1))    #矩阵每行的平均值
print(test.mean(axis=1).shape)    #axis=1时为求纵向平均值,此时矩阵只有一列

print(test.sum())   #矩阵元素和
print(test.sum(axis=0)) #矩阵列元素和
print(test.sum(axis=1)) #矩阵行元素和

print(test.max())   #矩阵最大值,可添加参数axis求行列最大项
print(test.argmax())   #矩阵最大值下标,可添加参数axis
print(test.diagonal())   #矩阵对角元素
print(test.nonzero())   #非零元素下标 返回数组,前面为行坐标,后为列坐标

        3.矩阵运算与方差、协方差、标准差计算:

# 3.矩阵运算与方差、协方差、标准差计算:
n=10
s=0
e=10
st=1
test=np.matrix([[1,2,3],[2,3,5],[4,12,6]])
#1.矩阵四则运算
print(test)
print(test+test)    #+
print(test-test)    #-
print(test*test)    #*
print(test**3)  #幂
print(n*test)   #数乘

#2.相关系数矩阵:主对角都为1,其他元素绝对值小于1 接近1表示变化趋势越接近,正负表示为正相关还是负相关
print(np.corrcoef(test,test[::-1]))
print(np.corrcoef(test,test))

#3.差值计算
print(np.cov(test)) #协方差
print(np.std(test)) #标准差
print(np.cov([1,2,3,4]))    #方差

四、求解线性方程组:

# 线性方程组求解
n=10
s=0
e=10
st=1
test=np.matrix([[1,2,3],[2,3,5],[4,12,6]])
# 获得系数矩阵与常数矩阵   a,b
a=test
b=np.array([2,4,7])
ans=np.linalg.solve(a,b)    #求解方程组  可通过np.dot(a,ans)看结果是否为b验证
print(ans)
ans=np.linalg.lstsq(a,b,rcond=None)    #最小二乘解,返回方程组解,余项,矩阵秩,a的奇异值
print(ans)

你可能感兴趣的:(python数据分析,python,线性代数)