NumPy数组对象

目录:1.掌握NumPy数组对象ndaray
1.1 创建数组对象
1.1.1 数组属性
1.2 生成随机数
1.3 通过索引访问数组
1.4 变换数组的形态

 

1.掌握NumPy数组对象ndaray

  1.1 创建数组对象

    1.1.1 数组属性

数组的属性及其说明

 

 

 

 

 

     1.1.2数组创建

    NumPy提供的array函数可以创建一维或多维数组,基本使用语法如下:

        numpy.array(object,dtype=None,copy=True,order='K',subok=False,ndmin=0)

array函数的主要参数及其说明

 

 

   创建数组并查看数组属性:

      In[1]: import numpy as np  #导入NumPy库

          arr1 = np.array([1234])  #创建一维数组

          print('创建的数组为:','arr1')

      Out[1]: 创建的数组为:[1 2 3 4]

      In[2]: #创建二维数组

          arr2 = np.array([1, 2, 3, 4],[4, 5, 6, 7],[7, 8, 9, 10])

          printf('创建的数组为:\n',arr2)

      Out[2]: 创建的数组为:

            [[ 1 2 3 4]

            [ 4 5 6 7]

            [ 7 8 9 10]]

      In[3]: printf('数组维度为:',arr2.shape)  #查看数组结构

      Out[3]: 数组维度为: (3, 4

      In[4]: printf('数组类型为:',arr2.dtype)  #查看数组类型

      Out[4]: 数组类型为:int32

      In[5]: printf('数组元素个数为:',arr2.size)  #查看数组元素个数

      Out[5]: 数组元素个数为:12

      In[6]: printf('每组元素大小为:',arr2.itemsize)  #查看数组每个元素的大小

      Out[6]: 数组每个元素大小为:4

 

  重新设置数组的shape属性:

      In[7]: arr2.shape = 4,3  #重新设置shape

          print('重新设置shape后的arr2为:',arr2)

      Out[7]: 重新设置shape后的arr2为:[[ 1 2 3]

                       [ 4 4 5]

                       [ 6 7 7]

                       [ 8 9 10]]

 

  使用arange函数创建数组(通过指定开始值、终值和步长来创建一维数组,创建的数组不含终值):

      In[8]: print('使用arrange函数创建的数组为:\n',np.arange(0,1,0.1))

      Out[8]: 使用arange函数创建的数组为:

          [0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9]

 

  使用linspace函数创建数组(通过指定开始值、终值和元素个数来创建一维数组,默认设置包括终值):

      In[9]: print('使用lispace函数来创建的数组为:',np.linspace(0, 1, 12))

      Out[9]: 使用lispace函数创建的数组为:[0.    0.09090909 ... 1.]

 

  使用logspace函数创建等比数列(生成1(10^0~ 100(10^2)的20个元素的等比数列):

      In[10]: print('使用logspace函数创建的数列为:',np.logspace(0, 2, 20))

      Out[10]: 使用logspace函数创建的数列为:[ 1.      1.27427499   1.62377674 ... 61.58482111  78.47599704  100.]

 

  使用zeros函数创建数组(zeros函数用来创建值全部为0的数组,即创建的数组值全部填充为0):

      In[11]: print('使用zeros函数创建的数组为:',np.zeros((2,3)))

      Out[11]: 使用zeros函数创建的数组为:[[ 0. 0. 0.]

                         [ 0. 0. 0.]]

 

  使用eye函数创建数组(生成主对角线上的元素为1,其他的元素为0的数值,类似单位矩阵):

      In[12]: print('使用eye函数创建的数组为:',np.eye(3))

      Out[12]: 使用eye函数创建的数组为:[[ 1. 0. 0.]

                        [ 0. 1. 0.]

                        [ 0. 0. 1.]]

 

  使用diag函数创建数组(创建类似对角线的数组,即除对角线以外的其他元素都为0,对角线上的元素可以是0或其他值):

      In[13]: print('使用diag函数创建的数组为:',np.diag([1,2,3,4]))

      Out[13]: 使用diag函数创建的数组为:[[1 0 0 0]

                        [0 2 0 0]

                        [0 0 3 0]

                        [0 0 0 4]]

 

  使用ones函数创建数组(用来创建元素全部为1的数组,即创建的数组元素全部填充为1):

      In[14]: print('使用ones函数创建的数组为:',np.ones((5,3)))

      Out[14]: 使用ones函数创建的数组为:[[ 1. 1. 1.]

                         [ 1. 1. 1.]

                        [ 1. 1. 1.]

                         [ 1. 1. 1.]

                         [ 1. 1. 1.]]

    1.1.3 数组数据类型

NumPy的基本数据类型及其取值范围

 

 

 

 

 数据类型转换

  In[15]: print('转换结果为:',np.float64(42))  #整型转换为浮点型

  Out[15]: 转换结果为; 42.0

  In[16]: print('转换结果为:',np.int8(42.0))  #浮点型转换为整型

  Out[16]: 转换结果为: 42

  In[17]: print('转换结果为:',np.bool(42))  #整型转换为布尔型

  Out[17]: 转换结果为: True

  In[18]: print('转换结果为:',np.bool(0))  #整型转换为布尔型

  Out[18]: 转换结果为: False

  In[19]: print('转换结果为:',np.float(True))  #布尔型转换为浮点型

  Out[19]: 转换结果为:1.0

  In[20]: print('转换结果为:',np.float(False))  #布尔型转换为浮点型

  Out[20]: 转换结果为:0.0

1.2 生成随机数

  random函数是最常见的生成随机数的方法:

      In[25]: print('生成的随机数组为:',np.random(100))

      Out[25]: 生成的随机数组为:[ 0.15343184  0.51581585  0.07228451  ...  0.24418316  0.92510545  057507965]

 

  rand函数可以生成服从均匀分布的随机数:

      In[26]: print('生成的随机数组为:\n',np.random.rand(10,5))

      Out[26]: 生成的随机数组为:[[0.39830491  0.94011394  0.59974923  0.44453894  0.65451838]

                          [0.72715001  0.07239451  0.03326018  0.13753806  0.44939676]

                      ...

                    [0.75647074  0.03379595  0.39187843  0.58779075  0.91797808]

                    [0.1468544  0.82972989  0.58011115  0.45157667  0.32422895]]

  注:每次运行代码后生成的随机数组都不一样,此处部分结果已经省略

 

  生成服从正态分布的随机函数:

      In[27]: print('生成的随机数组为:\n',np.random.randn(10,5))

      Out[27]: 生成的随机数组为:

           [[-0.60571968  0.39034908  -1.63315513  0.02783885  -1.84139301]

           [-0.38700901  0.10433949  -2.62719644  -0.97863269  -1.18774802]

            ...

           [-1.88050937  -0.97885403  -0.51844771  -0.51844771  -0.79439271  -0.83690031]

           [-0.27500487  1.41711262  0.6635967  0.35486644  -0.2670073]]

  注:每次运行代码后生成的随机数组都不一样,此处部分结果已经省略

 

  randint函数可以生成给定上下限范围的随机数,其格式如下:

   numpy.random.randint(low,high=None,size=None,dtype='1')

      In[28]: print('生成的随机数组为:',np.random.randint(2,10,size = [2,5]))

      Out[28]: 生成的随机数组为:[[6 6 6 6 8]

                    [9 6 6 8 4]]

  返回值为最小值不低于2、最大值不高于10的2行5列数组。

 

  random模块的常用随机数生成函数

 

 

 

 

 

 

 

1.3 通过索引访问数组

  1.3.1 一维数组的索引

      In[29]: arr = np.arange(10)

          print('索引结果为:',arr[5])  #用整数作为下标可以获取数组中的某个元素

      Out[29]: 索引结果为: 5

      In[30]: #用范围作为下标获取数组的一个切片,包括arr[3],不包括arr[5]

          print('索引结果为:',arr[3:5])

      Out[30]: 索引结果为:[3,4]

      In[31]: print('索引结果为:',arr[ :5])  #省略开始下标,表示从arr[0]开始

      Out[31]: 索引结果为:[0 1 2 3 4]

      In[32]: #下标可以使用负数,-1表示从数组最后往前数的第一个元素

          print('索引结果为:',arr[-1])

      Out[32]: 索引结果为:9

      In[33]: arr[2:4] = 100,101

          print('索引结果为:',arr)  #下标还可以用来修改元素的值

      Out[33]: 索引结果为:[ 0 1 100 101 4 5 6 7 8 9]

      In[34]: #范围中的第三个参数表示步长,2表示隔一个元素取一个元素

          print('索引结果为:',arr[1:-1:2])

      Out[34]: 索引结果为:[ 1 101 5 7]

      In[35]: print('索引结果为:',arr[5:1:-2])  #步长为负数时,开始下标必须大于结束下标

      Out[35]: 索引结果为:[ 5 101]

  1.3.2 多维数组的索引

      In[36]: a = np.arange(24).reshape((2,3,4))

          a

      Out[36]: array([[[ 0, 1, 2, 3],

                  [ 4, 5, 6, 7],
                   [ 8, 9, 10, 11]],

               [[12, 13, 14, 15],

               [16, 17, 18, 19],

               [20, 21, 22, 23]]])

      In[37]: a[0,1,2]

      Out[37]: 6

      In[38]: a[-1,-2,-3]

      Out[38]: 17

      In[39]: arr = np.array([1,2,3,4,5],[4,5,6,7,8],[7,8,9,10,11])

          print('创建的二维数组为:',arr)

      Out[39]: 创建的二维数组为:[[ 1 2 3 4 5]

                    [ 4 5 6 7 8]

                    [ 7 8 9 10 11]]

      In[40]: arr[0,3:5] 

      Out[40]: [4 ,5]

      In[41]: arr[1:,2:]  

      Out[41]: [ 6, 7, 8]

           [ 7 ,10 ,11]

      In[42]: arr[:,2]

      Out[42]: [3 ,6 ,9]

      In[43]: arr[1:,(0,2,3)]

      Out[43]: [[ 4, 6, 7]

           [ 7 ,9 ,10]]

      In[44]: mask = np.array([1,0,1],dtype = np.bool)

          print('索引结果为:',arr[mask,2])

      Out[44]: 索引结果为:[3,9]

 

  1.4 变换数组的形态

    改变数组形状:

      In[45]: arr = np.arange(12)

      Out[45]: [ 0 ,1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]

      In[46]: arr.reshape(3,4)

      Out[46]: [[ 0, 1, 2, 3]

           [ 4, 5, 6, 7]

           [ 8, 9, 10, 11]]

      In[47]: print('查看数组维度为:',arr.reshape(3,4).ndim)  #查看数组维度

      Out[47]: 数组维度为:2

 

   使用ravel函数展平数组:

      In[48]: arr = np.arange(12).reshape(3,4)

      Out[48]: [[ 0, 1, 2, 3]

           [ 4, 5, 6, 7]

           [ 8, 9, 10, 11]]

      In[49]: arr.ravel()

      Out[49]: [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]

 

  使用flatten函数展平数组:

      In[50]: arr.flatten()  #横向展平

      Out[50]: [ 0,1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]

      In[51]: arr.flatten('F')  #纵向展平

      Out[51]: [ 0, 4, 8, 1, 5, 9, 2, 6, 10, 3, 7, 11]

 

  使用hstack函数实现横向组合:

      In[52]: arr1 = np.arange(12).reshape(3,4)

      Out[52]: [[0,1,2,3]

           [4,5,6,7]

           [8,9,10,11]]

      In[53]: arr2 = arr1*3

      Out[53]: [[0,3,6,9]

           [12,15,18,21]

           [24,27,30,33]]

      In[54]: np.hstack(arr1,arr2)

      Out[54]: [[0,1,2,3,0,3,6,9]

           [4,5,6,7,12,15,18,21]

           [8,9,10,11,24,27,30,33]]

 

  使用vstack函数实现纵向组合:

      In[55]: np.vstack((arr1,arr2))

      Out[55]: [[0,1,2,3]

           [4,5,6,7]

           [8,9,10,11]

           [0,3,6,9]

           [12,15,18,21]

           [24,27,30,33]]

 

  使用concatenate函数组合数组:

      In[56]: np.concatenate((arr1,arr2),axis = 1)  #横向组合

      Out[56]: [[0,1,2,3,0,3,6,9]

           [4,5,6,7,12,15,18,21]

           [8,9,10,11,24,27,30,33]]

      In[57]: np.concatenate((arr1,arr2),axis = 0)  #纵向组合

      Out[57]: [[0,1,2,3]

           [4,5,6,7]

           [8,9,10,11]

           [0,3,6,9]

           [12,15,18,21]

           [24,27,30,33]]

 

  使用hsplit函数实现数组横向分割:

      In[58]: arr = np.arange(16).reshape(4,4)

      Out[58]: [[0,1,2,3]

           [4,5,6,7]

           [8,9,10,11]

           [12,13,14,15]]

      In[59]: np.hsplit(arr1,2)

      Out[59]: array([[0,1],

            [4,5],

            [8,9],

            [12,13]]),array([[2,3],

              [6,7],

              [10,11],

              [14,15]])

 

  使用vsplit函数实现数组纵向分割:

      In[60]: np.vsplit(arr,2)

      Out[60]: array([[0,1,2,3],

            [4,5,6,7]]),array([[8,9,10,11],

            [12,13,14,15]])

 

  使用split函数分割数组:

      In[61]: np.split(arr,2,axis = 1)  #横向分割

      Out[61]: array([[0,1],

            [4,5],

            [8,9],

            [12,13]]),array([[2,3],

            [6,7],

            [10,11],

            [14,15]])

      In[62]: np.split(arr,2,axis = 0)

      Out[62]: array([[0,1,2,3],

            [4,5,6,7]]),array([[8,9,10,11],

            [12,13,14,15]])

 

  由于写这时没有软件,可能会存在格式不规范等问题

posted @ 2020-03-06 15:05  XANN  阅读(1041)  评论(0编辑  收藏  举报