• 六. 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




  • 相关阅读:
    Qt之表单布局(QFormLayout)
    Qt之格栅布局(QGridLayout)
    Qt之水平/垂直布局(QBoxLayout、QHBoxLayout、QVBoxLayout)
    Qt之手动布局
    MAC OS下JDK版本切换指南
    Qt之自定义布局管理器(QBorderLayout)
    Qt之自定义布局管理器(QFlowLayout)
    Qt之自定义布局管理器(QCardLayout)
    springMVC获取file,几种转换
    java将白色背景图片转换成无色
  • 原文地址:https://www.cnblogs.com/Sup-to/p/11040497.html
Copyright © 2020-2023  润新知