zoukankan      html  css  js  c++  java
  • nmupy 索引/元素类型/数组运算/函数/广播

    NUMPY索引和切片

    数组和标量之间的运算

    a+1
    a*3
    1//a
    a**0.5

    同样大小数组之间的运算

    a+b
    a/b
    a**b

    数组的索引

    a[5]
    a2[2][3]
    a2[2,3]

    数组的切片

    a[5:8]
    a[:3]=1
    a2[1:3,:4]
    a2[:,:1]
    a2[:,1]

    与列表不同,数组切片不会自动复制,在切片数组上的修改会影响原数组

    【解决方法:copy()】

    b = a[:4]
    b = a[:4].copy()
    b[-1] = 250
    b[-1] =250

     问题:给一个数组,选出数组中所有大于5的数。

              a[a>5]

    原理:a>5,会对a中的每一个元素进行判断,返回一个布尔数组

            布尔型索引,将同样大小的布尔数组,传递索引,会返回一个由True对应位置的与元素的数组。

    给出一个数组,选出数组中所有大于5的偶数

    a[a>5 & (a%2==0)]

    给出一个数组,选出数组中所有大于5的数和偶数

    a[a>5 | (a%2==0)]

     花式索引*

    对于一个数组,选出其1,3,4,6,7个元素,组成心的二维数组。

      a[[1,3,4,6,7]]

    indexing

    实例子:取子矩阵

    a = np.array([[1,2,3,4],
                 [5,6,7,8],
                 [9,10,11,12]])
    
    
    #取子矩阵
    array([[ 6,  7],
           [10, 11]])
    
    a[-2:,1:3]   
    
    ###
    
    -2:,行,倒数第二行一直到最后
    1:3,列,从第一列,到第三列。
    
    #取 数字7
    a[1,-2]

     二维数据,也有可能产生一维。

    当我们在一个纬度,采用整数来获取元素,a.shape,来获取的时候,纬度就会-1

    当我们,不采用整数获取元素的时候,纬度可能会+1,或者不变。

    arange:产生一个指定范围的数组

    a 
    array([[1,2,3,4], [5,6,7,8], [9,10,11,12]])
    #a数组,每一行的第二列数字+10
    方法一:
    a[np.arange(3),1]+=10
    方法二:
    a[np.arange(3),[1,1,1]]+=10
    方法三:
    a[[0,1,2],[1,1,1]]+=10
    array([[1,12,3,4],
            [5,16,7,8],
            [9,20,11,12]])

    ##
    np.arange(3)
    array([0,1,2]) #产生一个包含数组[0,1,2]

    ##np.arange(3,7)
    arry([3,4,5,6]) #产生一个数组,从3到7,不包含7

    result_index = a>10

    a[result_index] 
    
    #获取a>10的元素,保存到一个数组中
    #简化操作

    a[a>10]

    元素的数据类型

    import numpy as np
    a = np.array([1,2])
    a.dtype
    
    #dtype(int64)
    a = np.array([1.1,2.2])
    a.dtype()
    
    #dtype('float64')

    a = np.array([1,2.2])
    #dtype('float64')

    #a = np.array([1.1,2.6])
    a= np.array([1.1,2.6],dtype=np.int64) #指定数据类型
    结果:去掉小数部分
    array([1,2])


    ###
    a = np.array([1.1,2.6])
    b = np.array(a,type=np.int64)

    b结果:
    array([1,2])

    数组运算和常用函数

     例子:非矩阵操作的加减乘除运算

    a = np.array([[1,2], 
    [
    2,3]]) b = np.array([[5,6], [7,8]])
    加法运算: a
    +b np.add(a,b)

    结果:a,b相对应的位置加减法 array([[
    6, 8], [ 9, 11]])


    减法运算:对应位置的减法
    a-b
    np.subtrack(a,b)


    乘法运算:
    a*b
    np.multiply(a,b)

    除法运算:
    a/b
    np.divide(a,b)

    矩阵运算操作:

    a =np.array([[1, 2],
                [2, 3]])
    
    b = np.array([[1,2,3],
                       [4,5,6]])
    
    矩阵之间的运算:乘  a的列,与b的行数相等
    a.dot(b)
    np.dot(a,b) 
    
    结果:
    array([[ 9, 12, 15],
           [14, 19, 24]])

    numpy 常用函数

    sum函数:求和

    a= np.array([[1, 2],
                [2, 3]])

    np.sum(a)

    # sum:对数组a中的元素,做求和操作

    np.sum(a,axis=0)

    #axis=0对数组中的每一列,求和操作

    # array([3,5])

    np.sum(a,axis=1)

    #axis=1对数组中的每一行,求和操作

    # array([3,5])

    mean函数:均值

    np.mean(a)
    
    #对数组a,所有和的平均值

    #对数组a 的每一列,均值操作
    np.mean(a,axis=0)

    #对数据a,的每一行,均值操作
    np.mean(a,axis=1)

    uniform函数:指定范围内的随机数值

    np.random.uniform(3,4)
    #指定生成3,4范围内的随机数值(带小数)

    tile函数:一个元素重复指定的次数。

    a = array([
            [1,2],
            [2,3]])
    
    np.tile(a,(1,2))
    #1行2列,基本单位是a,
    #行不变,以a为单位,在列上重复
    array([[1, 2, 1, 2], [2, 3, 2, 3]])

    np.tile(a,(2,1))
    #2行1列,a为单位
    #列不变,a为单位,在行上重复

    array([[1, 2],

           [2, 3],

           [1, 2],

           [2, 3]])



    np.tile(a,(2,3))
    #a为单位,在行重复2次,在列上重复3次

    array([[1, 2, 1, 2, 1, 2],

           [2, 3, 2, 3, 2, 3],

           [1, 2, 1, 2, 1, 2],

           [2, 3, 2, 3, 2, 3]])

     argsort函数:用于将数组当中的元素进行排序。

    a = np.array([[3,6,4,11],
              [5,10,1,3]])

    a.argsort()
    #每一行元素的下标,从小到大排序的
    array([0,2,1,3],
    [2,3,0,1])

    #每一列元素下表,按从小到大排序
    array([0,0,1,1],
    [1,1,0,0])

    矩阵转置操作

    a = np.array([[3,6,4,11],
                       [5,10,1,3]])
    
    #2种转置方法 a.T
    np.transpose(a)
    #第一列,转置成第一行,以此类推 array([3,5], [6,10], [4,1], [11,3])

    广播:

    在缺失纬度,和数组为1的纬度进行

    a = np.array([[1,2,3],
                 [2,3,4],
                 [12,31,22],
                 [2,2,2]])
    #二维,4*3的数据
    b = np.array([1,2,3])

    #将a的每一行,和b相加
    第一种方式:

    for i in range(4):
    a[i, :] += b

    #结果

    array([[ 2, 4, 6],
    [ 3, 5, 7],
    [13, 33, 25],
    [ 3, 4, 5]])

    第二种方式:

    a + np.tile(b,(4,1))

    a+,以b为单位,行重复4次,列重复1。

    #

    array([[ 3, 6, 9],
    [ 4, 7, 10],
    [14, 35, 28],
    [ 4, 6, 8]])

    第三种方式:

    a + b

    广播会在缺失纬度,和数组为1的纬度进行,这就是广播特性。

      

  • 相关阅读:
    GNU KHATA——开源的会计管理软件
    Web服务精讲–搭个 Web 服务器(二)
    据说Linuxer都难忘的25个画面
    谷歌开源运作解密
    实战Centos系统部署Codis集群服务
    这些被称为史上最 “贱” 黑客
    Linux 利器- Python 脚本编程入门(一)
    在 Ubuntu 16.04 上安装 LEMP 环境之图文向导
    Linux下6种优秀的邮件传输代理
    移动互联网期末笔记
  • 原文地址:https://www.cnblogs.com/catherine007/p/8947207.html
Copyright © 2011-2022 走看看