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的纬度进行,这就是广播特性。

      

  • 相关阅读:
    sublime开启vim模式
    git命令行界面
    搬进Github
    【POJ 2886】Who Gets the Most Candies?
    【UVA 1451】Average
    【CodeForces 625A】Guest From the Past
    【ZOJ 3480】Duck Typing
    【POJ 3320】Jessica's Reading Problemc(尺取法)
    【HDU 1445】Ride to School
    【HDU 5578】Friendship of Frog
  • 原文地址:https://www.cnblogs.com/catherine007/p/8947207.html
Copyright © 2011-2022 走看看