六. numpy数据矩阵
numpy 数据(矩阵模块)
种开源的数值计算扩展库.这种库可用来存储和处理大型矩阵,比python自身的嵌套列表结构要高效的多(该结构也可以用来表示矩
https://www.runoob.com/numpy/numpy-tutorial.html
比较一下 nu.array 和 list 的区别
np.array是多维的,list是一维的
list对一维数组做一些操作,numpy其实就是对多维做操作
.计算速度快,甚至优于python内置的简单运算,使其成为pandas、sklearn等模块的依赖包。高级的框架如TensorFlow、PyTorch等,其数组操作也和numpy非常相似
矩阵即numpy的np.array对象,创建矩阵就是把==列表==传入np.array()
import numpy as nu # 数据矩阵
# 一维矩阵 arr1 = nu.array([1, 2, 3]) print(arr1) # [1 2 3] # 只有一行 # 相当于一条直线
print("************************二维对象**********************************") #二维对象 arr2 = nu.array([[1, 2, 3], [4,5,6]]) print(arr2) # 有行有列 # 相当于一个面,里面有多条线,一个列表里装了多个一维 # 二维数组(用的最多的)
print("************************创建三维的ndarray对象**********************************") #创建三维的ndarray对象 arr3 = nu.array([[[1, 2, 3], [3,2,1]], [[4,5,6], [6,5,4]]]) print(arr3)
print("***********************shape(查看ndarray对象的形式)***********************************") # shape(查看ndarray对象的形式) arr4=nu.array( [[1, 2, 3, 4], [5, 6, 7, 8], [5, 6, 7, 8]]) print(arr4) # [[1 2 3 4] # [5 6 7 8] # [5 6 7 8]] cc=arr4.shape #获得多维数组的行和列,以元组形式表现出来 print(cc) # (3, 4) # (矩阵的行数,矩阵的列数) print(arr4.shape[0]) # 获取行 3 print(arr4.shape[1]) # 获取列 4
print("**************************切分工具********************************") # 2.切分工具 arr5=nu.array([ [1, 2, 3, 4], [5, 44, 88, 8], [5, 6, 7, 8]]) print(arr5[2,3]) # 行和列索引都从0开始,取第2行第3列 # 8 print(arr5[0,:]) #第一行,第1,2,3,4列的数 # [1 2 3 4] print(arr5[:,0]) #所有行,第1列的数 # [1 5 5] print(arr5[0:]) # 没有逗号的时候取出了全部 # [[1 2 3 4] # [5 6 7 8] # [5 6 7 8]] print(arr5[1,1:3]) #取第二行第第二个和第三个 # [44 88] print(arr5[arr5>3])#取大于3的值 # [ 4 5 44 88 8 5 6 7 8] #取第第一列大于3的值 arr_lien = arr5[:,0] print(arr_lien[arr_lien>3]) # [5 5] # 有一个多维数组存储的是人的年龄,表格里有200岁以上的年龄 arr6 = nu.array([ [1000,2,300,4],[5,600,7,8],[5,6,700,8]]) # arr>200 """array([[ True, False, True, False], [False, True, False, False], [False, False, True, False]])""" print(arr6[arr6>200]) # [1000 300 600 700]
print("**************************多维数组的元素的替换********************************") # 多维数组的元素的替换 arr7=nu.array([ [1, 2, 3, 4], [5, 44, 88, 8], [5, 6, 7, 8]]) cc=arr7[1,2]=666 print(arr7) #数组中大于30的数替换成了99 bb=arr7[arr7>30]=99 print(bb) print(arr7) # 所有行,第1列的数 修改成11 dd=arr7[:,0]=11 print(dd) print(arr7)
print("**************************多维数组的合并********************************") # 多维数组的合并 arre = nu.array([[1, 2, 3],[4,5,6]]) arrr = nu.array([[3, 2, 4],[5,3,7]]) #vertical 垂直新的 l=nu.vstack((arre,arrr)) print(l) #horizon 水平的 k=nu.hstack((arre,arrr)) print(k) # concatenate 连接的意思,默认垂直合并 b=nu.concatenate((arre,arrr)) print(b) # print(nu.concatenate((arre,arrr),axis=0或1) #前面只能写入一个容器,后面用axis控制竖着合并还是横着合并 print(nu.concatenate((arrr,arre),axis=1)) # 3.生成布尔矩阵 arr = nu.array([[1, 2, 3], [4,5,6]]) print(arr>5) ''' [[False False False] [False False True]] '''
print("********************通过函数方法创建多维数组**************************************") a1=[i for i in range(10)] print(a1) # np.arage(起始值,结束值,步长)#顾头不顾尾,用法类似for 循环中的range a2=[i for i in nu.arange(10)] print(a2) a3=[i for i in nu.arange(1,10,2)] print(a3) # .zeros/ones/eye # 构造3*4的全0矩阵 print(nu.zeros((3, 4))) #填的值为(行数,列数) """[[0. 0. 0. 0.] [0. 0. 0. 0.] [0. 0. 0. 0.]]""" # 构造3*4的全1矩阵 print(nu.ones((3, 4))) #填的值为(行数,列数) """[[1. 1. 1. 1.] [1. 1. 1. 1.] [1. 1. 1. 1.]]""" # 构造3个主元的单位矩阵 print(nu.eye(3)) #填的值为(主元的个数) ''' [[ 1. 0. 0.] [ 0. 1. 0.] [ 0. 0. 1.]] ''' # 2.linspace/logspace # 构造一个等差数列,取头也取尾,从0取到20,取5个数 print(nu.linspace(0, 20, 5)) #[ 0. 5. 10. 15. 20.] # 构造一个等比数列,从10**0取到10**20,取5个数 print(nu.logspace(0, 20, 5)) # [1.e+00 1.e+05 1.e+10 1.e+15 1.e+20] # 意思就是 生成两行两列 为十个零的数 print(nu.zeros((2,2,2)))
print("********************矩阵的运算**************************************") # 两个矩阵对应元素相加 # 两个矩阵对应元素相减 # 两个矩阵对应元素相乘 # / 两个矩阵对应元素相除,如果都是整数则取商 # % 两个矩阵对应元素相除后取余数 # n 单个矩阵每个元素都取n次方,如2:每个元素都取平方 ar = nu.array([[1, 2, 3],[4,5,6]]) er= nu.array([[3, 2, 4],[5,3,7]]) print(ar+er) """[[ 4 4 7] [ 9 8 13]]""" print(ar*2) """[[ 2 4 6] [ 8 10 12]]""" # 点乘和转置(了解) 点乘必须 m*n n *m print(nu.dot(ar,er.T)) """[[19 32] [46 77]]""" # 求逆(了解) print(nu.linalg.inv(nu.dot(ar,er.T))) """[[-8.55555556 3.55555556] [ 5.11111111 -2.11111111]]""" # 获取矩阵所有元素中的最大值 # print(ar.max()) # 获取举着每一列的最大值 # print(ar.max(axis=0)) # 获取矩阵每一行的最大值 # print(ar.max(axis=1)) # 获取矩阵最大元素的索引位置 # print(ar.argmax(axis=1) # 获取矩阵所有元素的平均值 # print(ar.mean()) # 获取矩阵每一列的平均值 # print(ar.mean(axis=0)) # 获取矩阵每一行的平均值 # print(ar.mean(axis=1)) # 获取矩阵所有元素的方差 # print(ar.var()) # 获取矩阵每一列的元素的方差 # print(ar.var(axis=0)) # 获取矩阵每一行的元素的方差 # print(ar.var(axis=1))
print("********************numpy生成随机数**************************************") # https://www.cnblogs.com/pythonywy/p/11010790.html # https://www.cnblogs.com/geyatou322/p/11012088.html # https://www.runoob.com/numpy/numpy-tutorial.html # RandomState()方法会让数据值随机一次,之后都是相同的数据 rs = nu.random.RandomState(1) print(rs.rand(10)) # 构造3*4的均匀分布的矩阵 # seed()方法会让数据值随机一次,之后都是相同的数据 np.random.seed(1) print(nu.random.rand(3, 4)) # 构造3*4*5的均匀分布的矩阵 print(nu.random.rand(3, 4, 5)) # 构造3*4的正态分布的矩阵 print(nu.random.randn(3, 4)) # 构造取值为1-5内的10个元素的ndarray数组 print(nu.random.randint(1, 5, 10)) # 构造取值为0-1内的3*4的矩阵 print(nu.random.random_sample((3, 4))) # 随机选取arr中的两个元素 print(nu.random.choice(arr, size=2))
# https://www.runoob.com/w3cnote/python-pip-install-usage.html