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]])

 

  由於寫這時沒有軟件,可能會存在格式不規范等問題


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM