• python进阶学习---numpy的使用


    numpy简介

    Numpy是一个python包,他代表“Numeric Python ”。他是一个由多维数组对象和用于处理数组的例程集合组成的库。

    使用Numpy,开发人员可以执行以下操作:

    • 数组的算数和逻辑运算
    • 傅里叶变换和用于图形操作的例程
    • 与线性代数有关的操作。Numpy拥有线性代数和随机数生成的内置函数

    numpy属性

    import numpy as np

    通过numpy可以创建指定的矩阵,并且可以查看该矩阵的维度、形状、大小、元素类型等

    import numpy as np
    array=np.array([[1,2,3],
                   [4,5,6],
                   [7,8,9]])
    print(array)
    '''
    [[1 2 3]
     [4 5 6]
     [7 8 9]]
    '''
    #查看矩阵的维度  ---->看括号的数量[]
    print(array.ndim)   #2
    #矩阵的形状
    print(array.shape)  #(3, 3)
    #矩阵的大小
    print(array.size)   #9
    #矩阵中元素的类型
    print(array.dtype)  #int32

    创建array

    创建一维数据并指定元素的数据类型

    import numpy as np
    #指定元素数据类型
    a=np.array([1,2,3],dtype=np.int32)
    print(a.dtype)  #int32
    print(a)    #[1 2 3]
    b=np.array([1,2,3],dtype=np.float)
    print(b.dtype)  #float64
    print(b)    #[1. 2. 3.]

    创建二维数据

    d=np.array([[1,2,3],
               [4,5,6]])
    print(d)
    '''
    [[1 2 3]
     [4 5 6]]
    '''

    生成指定特殊矩阵

    #生成2行3列全为0的矩阵
    zero=np.zeros((2,3))
    print(zero)
    '''
    [[0. 0. 0.]
     [0. 0. 0.]]
    '''
    #生成3行4列全为1的矩阵
    one=np.ones((3,4))
    print(one)
    '''
    [[1. 1. 1. 1.]
     [1. 1. 1. 1.]
     [1. 1. 1. 1.]]
    '''
    #生成3行2列全都接近于0但不等于0的矩阵
    empty=np.empty((3,2))
    print(empty)
    '''
    [[0. 0.]
     [0. 0.]
     [0. 0.]]
    '''

    生成指定范围的一维数组

    #生成指定范围的一维数组
    e=np.arange(10)
    print(e)    #[0 1 2 3 4 5 6 7 8 9]
    
    f=np.arange(4,12)
    print(f)    #[ 4  5  6  7  8  9 10 11]
    
    g=np.arange(1,20,3)
    print(g)    #[ 1  4  7 10 13 16 19]

    将生成的一维数据转换为指定行列数的矩阵--->重新定义矩阵的形状

    h=np.arange(8).reshape(2,4)
    print(h)
    '''
    [[0 1 2 3]
     [4 5 6 7]]
    '''

    numpy的运算

    加减乘(对应位相乘)除

    import numpy as np
    arr1=np.array([[1,2,3],
                  [4,5,6]])
    arr2=np.array([[1,1,2],
                   [2,3,3]])
    #矩阵的加法
    print(arr1+arr2)
    '''
    [[2 3 5]
     [6 8 9]]
    '''
    #矩阵的减法
    print(arr1-arr2)
    '''
    [[0 1 1]
     [2 2 3]]
    '''
    #矩阵的乘法--->对应位相乘
    print(arr1*arr2)
    '''
    [[ 1  2  6]
     [ 8 15 18]]
    '''
    #矩阵的除法
    print(arr1/arr2)
    '''
    [[1.         2.         1.5       ]
     [2.         1.66666667 2.        ]]
    '''

    幂、取余、取整、元素同加

    import numpy as np
    arr1=np.array([[1,2,3],
                  [4,5,6]])
    arr2=np.array([[1,1,2],
                   [2,3,3]])
    #求幂操作
    print(arr1**arr2)
    '''
    [[  1   2   9]
     [ 16 125 216]]
    '''
    #矩阵的取余
    print(arr1%arr2)
    '''
    [[0 0 1]
     [0 2 0]]
    '''
    #矩阵的取整
    print(arr1//arr2)
    '''
    [[1 2 1]
     [2 1 2]]
    '''
    #所有元素加同一个数--->乘、减、除类似
    print(arr1+2)
    '''
    [[3 4 5]
     [6 7 8]]
    '''

    判断、矩阵乘、转置

    import numpy as np
    arr1=np.array([[1,2,3],
                  [4,5,6]])
    arr2=np.array([[1,1,2],
                   [2,3,3]])
    #矩阵的判断
    arr3=arr1>3
    print(arr3)
    '''
    [[False False False]
     [ True  True  True]]
    '''
    #矩阵乘法规则的乘法
    #方式一
    arr=np.dot(arr1,arr4)
    print(arr)
    '''
    [[ 6.  6.  6.  6.  6.]
     [15. 15. 15. 15. 15.]]
    '''
    #方式二
    arr1.dot(arr4)
    #转置矩阵
    print(arr1.T)
    '''
    [[1 4]
     [2 5]
     [3 6]]
    '''
    print(np.transpose(arr1))
    '''
    [[1 4]
     [2 5]
     [3 6]]
    '''

    随机数生成以及矩阵的运算

    随机数生成

    import numpy as np
    sample1=np.random.random((3,2))    #生成3行2列从0到1的随机数
    print(sample1)
    '''
    [[0.17574158 0.94161903]
     [0.31902432 0.11888639]
     [0.93937211 0.57857994]]
    '''
    sample2=np.random.normal(size=(3,2))    #生成3行2列符合标准正态分布的随机数
    print(sample2)
    '''
    [[ 1.25383118 -0.97649298]
     [ 0.97212156 -0.93796601]
     [-1.39450905 -0.44917851]]
    '''
    sample3=np.random.randint(0,10,size=(3,2))  #生成3行2列从0到10的随机整数
    print(sample3)
    '''
    [[2 7]
     [0 3]
     [0 2]]
    '''

    矩阵的运算

    #求和
    print(np.sum(sample1))      #3.073223370929319
    #求最小值
    print(np.min(sample1))      #0.11888638852057853
    #求最大值
    print(np.max(sample1))      #0.941619034678746
    #对列求和
    print(np.sum(sample1,axis=0))       #[1.434138   1.63908537]
    #对行求和
    print(np.sum(sample1,axis=1))       #[1.11736062 0.4379107  1.51795205]
    
    #所有元素中最小值的索引
    print(np.argmin(sample1))       #3
    #所有元素中最大值的索引
    print(np.argmax(sample1))       #1
    #求平均值
    print(np.mean(sample1))     #0.5122038951548865
    print(sample1.mean())       #0.5122038951548865
    #求中位数
    print(np.median(sample1))   #0.4488021304789098
    #求开方的结果
    print(np.sqrt(sample1))
    '''
    [[0.41921543 0.97037057]
     [0.56482238 0.34479906]
     [0.96921211 0.76064443]]
    '''
    sample4=np.random.randint(0,10,size=(1,10))
    print(sample4)      #[[9 8 1 6 1 1 1 1 8 5]]
    #排序
    print(np.sort(sample4))     #[[1 1 1 1 1 5 6 8 8 9]]
    print(np.sort(sample1)) #对每一行进行排序
    '''
    [[0.17574158 0.94161903]
     [0.11888639 0.31902432]
     [0.57857994 0.93937211]]
    '''
    #按条件改变元素值(小于2的变为2,大于7的变成7)
    print(np.clip(sample4,2,7))     #[[7 7 2 6 2 2 2 2 7 5]]

    numpy的索引

    import numpy as np
    arr1=np.arange(2,14)
    print(arr1) #[ 2  3  4  5  6  7  8  9 10 11 12 13]
    #索引从0开始
    print(arr1[2])  #4
    #前包后不包
    print(arr1[1:4])    #[3 4 5]
    
    print(arr1[2:-1])   #[ 4  5  6  7  8  9 10 11 12]
    #前5个数据
    print(arr1[:5]) #[2 3 4 5 6]
    #取最后两个数据
    print(arr1[-2:])    #[12 13]
    #改变形式
    arr2=arr1.reshape(3,4)
    print(arr2)
    '''
    [[ 2  3  4  5]
     [ 6  7  8  9]
     [10 11 12 13]]
    '''
    #取第一行数据(0行开始)
    print(arr2[1])  #[6 7 8 9]
    #第一行第一列(形式1)
    print(arr2[1][1])   #7
    #第一行第二列(形式2)
    print(arr2[1,2])    #8
    #所有行的第二列
    print(arr2[:,2])    #[ 4  8 12]
    #for循环中迭代的是行
    for i in arr2:
        print(i)
    '''
    [2 3 4 5]
    [6 7 8 9]
    [10 11 12 13]
    '''
    #使用转置迭代列
    for i in arr2.T:
        print(i)
    '''
    [ 2  6 10]
    [ 3  7 11]
    [ 4  8 12]
    [ 5  9 13]
    '''
    #迭代每一个元素
    for i in arr2.flat:
        print(i)
    '''
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    '''

    array合并

    import numpy as np
    arr1=np.array([1,2,3])
    arr2=np.array([4,5,6])
    #垂直合并
    arr3=np.vstack((arr1,arr2))
    print(arr3) #[[1 2 3],[4 5 6]]
    print(arr3.shape)   #(2, 3)
    #水平合并
    arr4=np.hstack((arr1,arr2))
    print(arr4) #[1 2 3 4 5 6]
    print(arr4.shape)   #6
    
    arrv=np.vstack((arr1,arr2,arr3))
    print(arrv) #[[1 2 3],[4 5 6],[1 2 3],[4 5 6]]
    
    arrh=np.hstack((arr1,arr2,arr4))
    print(arrh) #[1 2 3 4 5 6 1 2 3 4 5 6]
    
    arr=np.concatenate((arr1,arr2,arr1))
    print(arr)      #[1 2 3 4 5 6 1 2 3]
    #axis=0表示纵向合并  合并的array维度要相同,array形状要匹配
    arr=np.concatenate((arr3,arrv),axis=0)
    print(arr)      #[[1 2 3],[4 5 6],[1 2 3],[4 5 6],[1 2 3],[4 5 6]]
    #axis=1表示横向合并  合并的array维度要相同,array形状要匹配
    arr=np.concatenate((arr3,arr3),axis=1)
    print(arr)      #[[1 2 3 1 2 3],[4 5 6 4 5 6]]
    
    #一维的array不能转置
    print(arr1.T)   #[1 2 3]
    print(arr1.shape)       #(3,)
    
    arr1_1=arr1[np.newaxis,:]
    print(arr1_1)   #[[1 2 3]]
    print(arr1_1.shape) #(1, 3)
    print(arr1_1.T) #[[1],[2],[3]]
    
    arr1_2=arr1[:,np.newaxis]
    print(arr1_2)   #[[1],[2],[3]]
    print(arr1_2.shape) #(3, 1)
    #变成2维数据
    arr1_3=np.atleast_2d(arr1)
    print(arr1_3)   #[[1 2 3]]
    print(arr1_3.T) #[[1],[2],[3]]

    array分割

    import numpy as np
    arr1=np.arange(12).reshape((3,4))
    print(arr1) #[[ 0  1  2  3],[ 4  5  6  7],[ 8  9 10 11]]
    
    #水平方向分为2部分
    arr2,arr3=np.split(arr1,2,axis=1)
    print(arr2)     #[[0 1],[4 5],[8 9]]
    print(arr3)     #[[ 2  3],[ 6  7],[10 11]]
    #垂直方向分为3份
    arr4,arr5,arr6=np.split(arr1,3,axis=0)
    print(arr4)     #[[0 1 2 3]]
    print(arr5)     #[[4 5 6 7]]
    print(arr6)     #[[ 8  9 10 11]]
    #水平方向分为3份--->不等分割
    arr7,arr8,arr9=np.array_split(arr1,3,axis=1)
    print(arr7)     #[[0 1],[4 5],[8 9]]
    print(arr8)     #[[ 2],[ 6],[10]]
    print(arr9)     #[[ 3],[ 7],[11]]
    #垂直分割
    arrv1,arrv2,arrv3=np.vsplit(arr1,3)
    print(arrv1)        #[[0 1 2 3]]
    print(arrv2)        #[[4 5 6 7]]
    print(arrv3)        #[[ 8  9 10 11]]
    #水平分割
    arrh1,arrh2=np.hsplit(arr1,2)
    print(arrh1)        #[[0 1],[4 5],[8 9]]
    print(arrh2)        #[[ 2  3],[ 6  7],[10 11]]

     numpy的浅拷贝和深拷贝

    import numpy as np
    arr1=np.array([1,2,3])
    arr2=arr1       #arr1和arr2共享同一块内存,浅拷贝
    arr2[0]=5
    print(arr1)     #[5 2 3]
    print(arr2)     #[5 2 3]
    #深拷贝
    arr3=arr1.copy()
    arr3[0]=10
    print(arr1)     #[5 2 3]
    print(arr3)     #[10  2  3]
  • 相关阅读:
    Smarty模板引擎技术(三)
    Smarty模板引擎技术(二)
    Smarty模板引擎技术(一)
    Ajax技术
    JavaScript--XML DOM
    JavaScript--HTML DOM
    [转]常用正则表达式
    JavaScript--事件
    CentOS 下开启PHP错误提示
    JavaScript实例
  • 原文地址:https://www.cnblogs.com/zhuoning/p/11596733.html
Copyright © 2020-2023  润新知