numpy快速入门教程(二)

来源:互联网 发布:军爷捏脸数据 编辑:程序博客网 时间:2024/05/21 23:34

本教程是numpy快速入门教程的最后一篇,在这篇文章中,我将会介绍到一些关于numpy的快捷操作以及numpy的广播。

一、获取和修改数组的值

1、根据下标获取和修改数组的值

import numpy as np#numpy修改数组值得快捷操作if __name__ == "__main__":    a = np.array([[1,2,3],[4,5,6],[7,8,9]])    #创建获取数组的指定列的下标    col_index = np.array([1,2,0])    #根据所选的列下标数组获取数组中的元素,np.arrage(3),会产生一个[0,1,2]的数组    result1 = a[np.arange(3),col_index]    print(result1) #[2 6 7]    #修改指定下标位置的元素值    a[np.arange(3), col_index] += 6    print(a)    '''    [[ 1  8  3]     [ 4  5 12]     [13  8  9]]    '''

2、根据一个bool类型的数组来获取数组的值

    '''    通过一个boolean类型的数组来选择数组中的元素    '''    d = np.array([[5,1,3,4],[6,8,9,1],[10,4,2,1]])    #选出数组中大于3的元素    bool_con = d > 3    #获取满足条件的元素    d_con = d[bool_con]    print(d_con)       #[ 5  4  6  8  9 10  4]    print(d[d > 3])    #[ 5  4  6  8  9 10  4]

二、numpy的数据类型

import numpy as npif __name__ == "__main__":    '''    numpy提供了许多的数据类型,在创建数组没有指定数据类型,numpy会提供了一个默认的数据类型    '''    a = np.array([1,2,3])    print(a.dtype)   #int32    b = np.array([1.1,2.0,3.0])    print(a.dtype)    #int32    c = np.array([1,2,3],dtype=np.int64)    print(c.dtype)    #int64

三、numpy数组的基本操作

1、数组之间的加、减、乘、除

import numpy as npif __name__ == "__main__":    #创建两个数组,指定数组的数据类型为float32    x = np.array([[1,2],[3,4]],dtype=np.float32)    y = np.array([[5,6],[7,8]],dtype=np.float32)    #数组之间的加法    add1 = x + y    add2 = np.add(x,y)    print(add1)    '''    [[  6.  8.]    [ 10.  12.]]    '''    print(add2)    '''    [[  6.  8.]    [ 10.  12.]]    '''    #数组之间的减法    subxy1 = x - y    subxy2 = np.subtract(x,y)    print(subxy1)    '''    [[-4. -4.]    [-4. -4.]]    '''    print(subxy2)    '''    [[-4. -4.]    [-4. -4.]]    '''    #数组之间的乘法    mulxy1 = x * y    mulxy2 = np.multiply(x,y)    print(mulxy1)    '''    [[  5.  12.]    [ 21.  32.]]    '''    print(mulxy2)    '''    [[  5.  12.]    [ 21.  32.]]    '''    #数组之间的除法    divxy1 = x/y    divxy2 = np.divide(x,y)    print(divxy1)    '''    [[ 0.2        0.33333334]    [ 0.42857143  0.5      ]]    '''    print(divxy2)    '''    [[ 0.2        0.33333334]    [ 0.42857143  0.5      ]]    '''    #求数组的平方根    sqrtx = np.sqrt(x)    print(sqrtx)    '''    [[ 1.          1.41421354]    [ 1.73205078  2.        ]]    '''

2、数组之间的点乘

    #数组之间的点乘,注意左乘和右乘的区别,注意两个数组点乘的条件是前一个矩阵的列等于后一个矩阵的行    # 创建两个数组,指定数组的数据类型为float32    x = np.array([[1, 2], [3, 4]], dtype=np.float32)    y = np.array([[5, 6], [7, 8]], dtype=np.float32)    dotxy1 = np.dot(x,y)  #等价于x.dot(y)    print(dotxy1)    '''    [[ 19.  22.]    [ 43.  50.]]    计算过程    19 = 1*5 + 2*7    22 = 1*6 + 2*8    43 = 3*5 + 4*7    50 = 3*6 + 4*8    '''    dotxy2 = np.dot(y,x) #等价于y.dot(x)    print(dotxy2)    '''    [[ 23.  34.]    [ 31.  46.]]    计算过程    23 = 5*1 + 6*3    34 = 5*2 + 6*4    31 = 7*1 + 8*3    46 = 7*2 + 8*4    '''

3、数组求和

    #数组求和函数    x = np.array([[1, 2], [3, 4]], dtype=np.float32)    #求所有数组元素的和    sum1 = np.sum(x)    print(sum1)  #10.0    #求数组相同列之间元素的和    sum2 = np.sum(x,axis=0)    print(sum2)  #[ 4.  6.]    #求数组相同行之间元素的和    sum3 = np.sum(x,axis=1)    print(sum3)  #[ 3.  7.]

4、矩阵的转置

    #求矩阵的转置,将矩阵的行变成列,列变成行    x = np.array([[1, 2], [3, 4]], dtype=np.float32)    print(x)    '''    [[ 1.  2.]    [ 3.  4.]]    '''    transposition_x = x.T    '''    [[ 1.  3.]    [ 2.  4.]]    '''    print(transposition_x)

四、数组的广播

import numpy as np#广播'''广播是numpy提供的一个非常重要的技巧对于操作不同大小的矩阵1、如果两个数组的阶不相同,将低阶的数组大小转换成与高阶的大小相同2、如果两个数组的维度相同或者其中一个数组的维度为13、数组在所有的维度上都可以进行广播4、经过广播之后的两个数组,数组的大小等于维度最大的那个5、如果一个数组的维度为1,而另一个数组的维度是任意的,那么这个维度为1的数组,会复制自己的元素达到与另一个数组拥有相同的维度'''if __name__ == "__main__":    a = np.array([[1,2,3],[4,5,6],[7,8,9]])    v = np.array([1,0,1])    #给矩阵a的每一行都加上v,在执行下面代码的时候,numpy会自动调用广播    #将矩阵v先扩展成为[[1,0,1],[1,0,1],[1,0,1]]然后再与矩阵a做加法    b = a +v    print(b)    '''    [[ 2  2  4]    [ 5  5  7]    [ 8  8 10]]    '''    v1 = np.array([2])    b1 = a + v1    print(b1)    '''    [[ 3  4  5]    [ 6  7  8]    [ 9 10 11]]    '''    #并不是所有的不同维度数组之间的操作都可以使用广播    v2 = np.array([1,2])    b2 = a + v2    #ValueError: operands could not be broadcast together with shapes (3,3) (2,)    print(b2)







原创粉丝点击