美文网首页Numpy
NumPy基础之数组的操作

NumPy基础之数组的操作

作者: 5f2a6061653d | 来源:发表于2018-08-24 21:47 被阅读21次

    数组的操作

    数组创建完成之后,需要对数组中数据进行访问,对数组的信息进行获取,对数组整体进行操作,接下来着重讲解对数组的操作。
    1.获取数组轴的个数,在Python中轴的个数被称为秩。
    NumPy中通过ndim来获取数组的轴的个数,具体示例如下所示:

    In [35]: import numpy as np
    In [36]: arr = np.array([[1,2,3,4],[5,6,7,8]])
    In [37]: rank = arr.ndim
    

    上述代码是获取数组轴的个数,其中In [36]是创建数组arr;In [37]是获取数组arr轴的个数并赋值给变量rank;运行结果如下所示:

    In [38]: rank
    Out[38]: 2
    

    2.获取数组的维度,即行数和列数。

    NumPy中通过shape来获取数组的维度,即获取数组的行数和列数,具体示例如下所示:

    In [39]: import numpy as np
    In [40]: arr = np.array([[1,2,3,4],[5,6,7,8]])
    In [41]: shape = arr.shape
    

    上述代码是获取数组的维度,其中In [40]是创建数组arr;In [41]是获取数组arr的维度并赋值给变量shape;运行结果如下所示:

    In [42]: shape
    Out[42]: (2, 4)
    

    3.获取数组中元素个数。

    NumPy中通过size来获取数组中元素的总个数,即为shape中元组元素的乘积,具体示例如下所示:

    In [43]: import numpy as np
    In [44]: arr = np.array([[1,2,3,4],[5,6,7,8]])
    In [45]: size = arr.size
    

    上述代码是获取数组中元素的个数,其中In [44]是创建数组arr;In [45]是获取数组arr的元素个数并赋值给变量size;运行结果如下所示:

    In [46]: size
    Out[46]: 8
    

    4.获取数组中元素类型。

    NumPy中通过dtype来获取数组中元素类型,其中含有不同精度数据时,以精度高的为基准,具体示例如下所示:

    In [47]: import numpy as np
    In [48]: arr = np.array([[1,2,3,4],[5,6,7,8]])
    In [49]: arr1 = np.array([[1.0,2,3,4],[5.0,6,7,8]])
    In [50]: type1 = arr.dtype
    In [51]: type2 = arr1.dtype
    

    上述代码是获取数组中元素类型,其中In [48]是创建数组arr;In [49]是创建含有浮点数和整数的数组arr1;In [50]是获取数组arr中元素类型,并赋值给变量type1;In [51]是获取数组arr1中元素类型并赋值给变量type2;运行结果如下所示:

    In [52]: type1
    Out[52]: dtype('int32')
    In [53]: type2
    Out[53]: dtype('float64')
    

    上述运行结果中,type1为int32,而type2为float64,因此数组中元素类型根据精度高为基准确定的。

    NumPy中支持多类型的数据,具体如下表所示。

    类型 类型代码 说明
    int8,uint8 i1,u1 有符号和无符号的8位(1个字节)整型
    int16,uint16 i2,u2 有符号和无符号的16位(2个字节)整型
    int32,uint32 i4,u4 有符号和无符号的32位(4个字节)整型
    int64,uint64 i8,u8 有符号和无符号的64位(8个字节)整型
    float16 f2 半精度浮点数
    float32 f4或f 标准单精度浮点数,与C的float兼容
    float64 f8或d 标准的双精度浮点数,与C的double和Python的float对象兼容
    float128 f16或g 扩展精度浮点数
    complex64,complex128 c8,c16 分别用两个32位、64位或128位浮点数表示的复数
    complex258 c32 复数
    bool 存储True和False值的布尔类型
    object O Python对象类型
    string_ S 固定长度的字符串类型(每个字符1个字节)
    unicode_ U 固定长度的Unicode类型(字节数由平台决定),与字符串的定义方式一样

    5.访问数组。

    • 访问一维数组

    数组是通过索引来进行访问的,一维数组的访问具体示例如下所示:

    In [54]: import numpy as np
    In [55]: arr = np.array([1,2,3,4,5,6,7,8,9,10])
    In [56]: a = arr[0]
    In [57]: b = arr[5]
    

    上述代码是访问一维数组,其中In [55]是创建了一个一维数组arr;In [56]是获取数组中索引值为0的数值并赋值给变量a;In [57]是获取数组中索引值为5的数值并赋值给变量b;a,b运行结果如下所示:

    In [58]: a
    Out[58]: 1
    In [59]: b
    Out[59]: 6
    
    • 访问二维或多维数组

    二维数组或多维数组也是通过索引来访问的,接下来以二维数组为例讲解二维数组或多维数组的访问,具体示例如下所示:

    In [60]: import numpy as np
    In [61]: arr = np.array([[1,2,3,4],[5,6,7,8]])
    In [62]: a = arr[0][0]
    In [63]: b = arr[1][3]
    

    上述代码是访问二维数组,其中In [61]是创建了一个二维数组arr;In [62]是获取数组中行索引值为0且列索引值也为0,即第1行第1列(数组索引值都是从0开始的)的数值并赋值给变量a;In [63]是获取数组中行索引值为1列索引值为3,即第2行第4列的数值并赋值给变量b;a,b运行结果如下所示:

    In [64]: arr
    Out[64]:
    array([[1, 2, 3, 4],
     [5, 6, 7, 8]])
    In [65]: a
    Out[65]: 1
    In [66]: b
    Out[66]: 8
    

    6.数组切片

    • 一维数组切片

    一维数组切片与Python中列表切片类似,具体示例如下所示:

    In [67]: import numpy as np
    In [68]: arr = np.array([1,2,3,4,5,6,7,8,9,10])
    In [69]: a = arr[1:5]
    In [70]: b = arr[:5]
    In [71]: c = arr[1:]
    In [72]: d = arr[:]
    

    上述代码是一维数组切片,其中In [68]是创建了一个一维数组arr;In [69]是对数组按照索引值从1到5(包括索引值1,不包括索引值5)进行切片截取并赋值给变量a;In [70]是按照索引值从数组起始位置到5(不包括索引值5)进行切片截取并赋值给变量b;In [71]是按照索引值从1到数组结尾位置(包括索引值1)进行切片截取并赋值给变量c;In [72]是切片截取整个数组并赋值给变量d;a,b,c,d运行结果如下所示:

    In [73]: arr
    Out[73]: array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
    In [74]: a
    Out[74]: array([2, 3, 4, 5])
    In [75]: b
    Out[75]: array([1, 2, 3, 4, 5])
    In [76]: c
    Out[76]: array([ 2, 3, 4, 5, 6, 7, 8, 9, 10])
    In [77]: d
    Out[77]: array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
    
    • 二维或多维数组切片

    二维数组或多维数组切片原理与上述一维数组切片类似,但整体理解可能会有一定的难度,因此本节将以二维数组为例详细讲解二维或多维数组切片,具体示例如下所示:

    In [78]: import numpy as np
    In [79]: arr = np.array([[1,2,3],[4,5,6],[7,8,9]])
    In [80]: a = arr[1:2,1:2]
    In [81]: b = arr[1:,:2]
    In [82]: c = arr[:2,1:]
    In [83]: d = arr[:,:]
    

    上述代码是访问二维数组切片,其中In [79]是创建了一个3×3的二维数组arr,In [80]是数组arr切片的索引值由两部分组成前者1:2是数组中行的切片操作,按照索引值从1到2(包括索引值1,不包括索引值2)进行行切片截取,即从截取第23行,后者1:2是数组中列的切片操作,在行切片的基础上进行列切片操作,即截取第23列,并将最终切片截取结果赋值给变量a;In [81]是数组切片的索引值同样由两部分组成,前者是从数组第2行到最后一行的行切片操作,后者是从第1列到第3列(不包括第3列)的列切片操作,并将最终切片截取结果赋值给变量b;In [82]是数组切片的索引值也是由两部分组成,前者是从数组的第1行到第3行(不包括第3行)的行切片操作,后者是从数组的第2列到最后1列的列切片操作,并将最终切片截取结果赋值给变量c;In [83]是切片截取整个二维数组;a,b,c,d运行结果如下所示:

    In [84]: arr
    Out[84]:
    array([[1, 2, 3],
     [4, 5, 6],
     [7, 8, 9]])
    In [85]: a
    Out[85]: array([[5]])
    In [86]: b
    Out[86]:
    array([[4, 5],
     [7, 8]])
    In [87]: c
    Out[87]:
    array([[2, 3],
     [5, 6]])
    In [88]: d
    Out[88]:
    array([[1, 2, 3],
     [4, 5, 6],
     [7, 8, 9]])
    

    相关文章

      网友评论

        本文标题:NumPy基础之数组的操作

        本文链接:https://www.haomeiwen.com/subject/jewdbftx.html