Python數據分析之Numpy庫的使用詳細講解一、簡介二、安裝三、數組的創建


本篇文章目錄

  • 一、簡介

  • 二、安裝

  • 三、數組的創建

    • 3.1 array創建

    • 3.2 arange創建

    • 3.3 隨機數創建數組

      • 3.3.1 創建隨機小數

      • 3.3.2 創建隨機整數

      • 3.3.3 創建標准正態分布數組

      • 3.3.4 創建指定期望與方差的正態分布數組

    • 四、ndarray對象的屬性

    • 五、其他形式創建數組

      • 5.1 zeros創建數組

      • 5.2 ones創建數組

      • 5.3 empty創建數組

      • 5.4 linspace創建等差數組

      • 5.5 logspace創建等比數組

    • 六、數組的切片和索引

      • 6.1 一維數組的切片和索引

      • 6.2 二維數組的切片和索引

    • 七、數組的復制

    • 八、改變數組的維度

      • 8.1 一維數組修改為多維數組

        • 8.1.1 reshap方法

        • 8.1.2 np.reshape()方法

      • 8.2 多維數組修改為一維數組

        • 8.2.1 reshape()方法

        • 8.2.2 reshape(-1)方法

        • 8.2.3 ravel()函數方法

        • 8.2.4 flatten()函數方法

    • 九、數組的拼接

      • 9.1 水平數組拼接

      • 9.2 垂直數組拼接

      • 9.3 concatenate數組拼接

    • 十、數組的分割

      • 10.1 split()方法分割

        • 10.1.1 一維數組分割

        • 10.1.2 二維數組分割

      • 10.2 hsplite()方法水平分割

      • 10.3 vsplite()方法垂直分割

    • 十一、數組的轉置

    • 十二、函數

      • 12.1算數函數

        • 12.1.1 加法運算

        • 12.1.2 減法運算

        • 12.1.3 乘法運算

        • 12.1.4 除法運算

        • 12.1.5 out參數的使用

        • 12.1.6 sin()函數使用

        • 12.1.7 四舍五入

        • 12.1.8 向上取值函數

        • 12.1.9 向下取值函數

      • 12.2聚合函數

        • 12.2.1 部分聚合函數

        • 12.2.2 部分聚合函數示例

          • 12.2.2.1 power()函數示例

          • 12.2.2.2 median()函數示例

          • 12.2.2.3 mean()函數示例

一、簡介

Numpy是科學計算基礎庫,提高大量科學計算的功能,比如數據統計,隨機數生成等,其提供最核心類型為多維數組類型(ndarray),支持大量的維度數組與矩陣運算,Numpy支持向量處理ndarry對象,提高程序的運算速度。

二、安裝

  • pip install numpy

三、數組的創建

3.1 array創建

array函數參數為:array(p_object, dtype=None, copy=True, order=‘K’, subok=False, ndmin=0) ,下面只介紹常用參數類型。 1、p_object:數組對象 2、dtype:指定轉換的數據中的數據類型 3、ndmin:指定維度數

  • 一維數組創建 一維數組的創建只需傳入一個列表即可,輸出的類型為numpy.ndarray類型 示例代碼:

    import numpy as np
   
  # 使用array函數創建一維數組
  x = np.array([1, 2, 3, 4])
  print(x) # [1 2 3 4]
  print(type(x)) # <class 'numpy.ndarray'>
  • 二維數組創建 同一維數組一樣,同樣傳入列表即可。 注意:傳入的列表最外層還有一層中括號,如果不加則會報錯。 示例代碼:

    import numpy as np
   
  # 使用array函數創建二維數組
  y = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # 創建二維數組
  print(y)
  輸出結果:
  [[1 2 3]
  [4 5 6]
  [7 8 9]]
  print(type(x)) # <class 'numpy.ndarray'>
  • 三維數組創建 三位數組同二維一樣,只不過在最外層又加上了一層中括號。 示例代碼:

    import numpy as np
   
  # 使用array函數創建三維數組
  z = np.array([[[1, 2, 3], [4, 5, 6], [7, 8, 9]]]) # 創建三維數組
  print(z)
  輸出結果:
  [[[1 2 3]
  [4 5 6]
  [7 8 9]]]
  • 數組中dtype()的使用。 dtype可以將創建的數組轉換為其他類型。 注意:轉換的只是列表中的數據類型,並不是numpy.ndarray類型。 示例代碼:

    import numpy as np
   
  # dtype的使用,轉換類型
  w = np.array([1, 2, 3], dtype=float) # 將列表中的數據轉換為浮點型,還可以轉換為字符串類型
  print(w) #[1. 2. 3.],列表中的數據轉換為浮點型
  print(type(w)) #<class 'numpy.ndarray'>,返回的類型仍然是ndarray類型
  • ndmin的使用,指定維度數 ndmin可以指定數組的維度數,單個列表也可以創建出三位數組。但指定的高維數組轉換不了低維數組。 示例代碼:一維數組通過ndmin轉換為三維數組

    import numpy as np
   
  # ndmin的使用,指定維度數
  a = np.array([1, 2, 3], dtype=float, ndmin=3)
  print(a) # [[[1. 2. 3.]]]轉換為三維數據
  print(type(a)) # <class 'numpy.ndarray'>

示例代碼:三位數組使用ndmin轉換不了低維數組

    # ndmin的使用,指定維度數
  a = np.array([[[1, 2, 3], [4, 5, 6], [7, 8, 9]]], dtype=float, ndmin=1) # 指定的數組為三維,ndmin為1,輸出結果還是三維
  print(a)
  輸出結果:
  [[[1. 2. 3.]
  [4. 5. 6.]
  [7. 8. 9.]]]

3.2 arange創建

arange函數的參數:arange([start,] stop[, step,], dtype=None) 1、start:起始值 2、stop:終止值 3、step:步長,默認為1 4、dtype:轉換類型,如果不指定,則會使用數據類型 示例代碼:

    import numpy as np
   
  # 創建1-10的數組
  a = np.arange(0, 10, dtype=int)
  print(a)
  輸出結果:
  [0 1 2 3 4 5 6 7 8 9]

設置步長代碼:

    import numpy as np
   
  # 創建1-10的數組
  a = np.arange(0, 10, 2, dtype=int) # 設置步長為2的數組
  print(a)
  輸出結果:
  [0 2 4 6 8]

3.3 隨機數創建數組

3.3.1 創建隨機小數

隨機數創建數組采用的是numpy庫里面的random()函數。 語法:np.random.random(size=None) 返回的是0.0-1.0之間的隨機數,但不包括1.0,size指定隨機數的個數。 創建一維數組示例代碼:

    import numpy as np
    
    # 生成0-1之間的隨機數組,共10個數據
    a = np.random.random(10)
    print(a)	
    輸出結果:
    [0.10646094 0.55262119 0.1376072  0.09820666 0.25679125 0.75362808
    0.92731829 0.7927795  0.69050268 0.1210358 ]

創建二維數組時傳入的size參數,指定的是數組的行和列 創建二維數組示例代碼:

    import numpy as np
    
    # 創建二維隨機數組
    b = np.random.random(size=(2, 3))	# 創建2行3列的隨機數組 
    print(b)
    輸出結果:
    [[0.37721388 0.37544322 0.21520047]
    [0.53715603 0.30601605 0.06256915]]

創建三維數組時傳入的size參數為三個。 創建三位數組示例代碼:

    import numpy as np
    
    # 創建三維隨機數組
    c = np.random.random(size=(2, 3, 4))	# 創建2個三行四列的數組
    print(c)
    輸出結果:
    [[[0.36208984 0.81947471 0.14298442 0.79046203]
      [0.54460578 0.24994409 0.46474527 0.32052213]
      [0.17897466 0.82689056 0.90160973 0.45336997]]
    
     [[0.45532895 0.8677309  0.09609607 0.51677404]
      [0.57373632 0.27907846 0.70424555 0.84253691]
      [0.57790128 0.20907129 0.49335608 0.87549777]]]

3.3.2 創建隨機整數

創建隨機整數使用的是randint()函數,參數為:randint(low, high=None, size=None, dtype=‘l’) low:最小值 high:最大值 size:指定維度數,一維、二維、三維。 dtype:指定數組類型 創建一維隨機整數示例代碼:

    import numpy as np
    
    # 生成一維0-5之間的10個隨機整數
    a = np.random.randint(0, 5, size=10)	# size為10 ,表示創建一維10個隨機整數。
    print(a)	
    輸出結果:
    [4 1 0 1 2 0 3 1 0 2]

創建二維數組時size的參數為一個元組,指定行和列 創建二維隨機整數示例代碼:

    import numpy as np
    
    # 創建二維2-8之間的隨機數組
    b = np.random.randint(2, 8, size=(2, 3))
    print(b)	
    輸出結果:
    [[3 6 3]
    [3 4 4]]

創建三維隨機整數示例代碼:

    import numpy as np
    
    # 創建三維2-8之間的隨機數組
    c = np.random.randint(2, 8, size=(2, 3, 4))	# 創建三維數組
    print(c)
    輸出結果:
    [[[6 5 6 4]
      [2 3 4 5]
      [5 5 7 5]]
    
     [[5 2 2 5]
      [3 4 5 5]
      [3 3 6 3]]]

3.3.3 創建標准正態分布數組

創建標准正態分布使用的時randn()方法。 randn(d0, d1, …, dn),返回一個或一組樣本,具有標准正態分布(期望為0,均值為1) dn表示維度數 創建一維標准正態分布示例代碼:

    import numpy as np
    
    # 創建一維標准正態分布
    a = np.random.randn(6)
    print(a)
    輸出結果:
    [ 0.58850012 -0.88685655 -1.00077417  2.50602404 -0.69627562  1.19382079]

創建二維標准正態分布:

    import numpy as np
    
    # 創建一維標准正態分布
    b = np.random.randn(2, 3)	# 指定行和列
    print(b)
    輸出結果:
    [[-1.59507936  2.00741908 -0.19886889]
     [-0.78522123 -0.94702049  0.10118063]]

創建三維標准正態分布:

    import numpy as np
    
    # 創建一維標准正態分布
    c = np.random.randn(2, 3, 4)
    print(c)
    輸出結果:
    [[[ 2.25392453 -1.03092967  0.62695321 -1.59550922]
      [ 0.21379353 -1.14740262  1.39019012  0.01449549]
      [ 1.29115361  0.01583029 -1.53528833 -1.65218213]]
    
     [[ 1.36693468  1.27192511 -0.36759254 -0.67529018]
      [ 0.12840871 -0.40780793  0.3604168   0.88594743]
      [ 0.57778304 -2.42864619 -0.5829699  -0.29083045]]]
    

3.3.4 創建指定期望與方差的正態分布數組

創建指定期望與方差時的數組,采用的是normal()函數。 參數為:normal(loc=0.0, scale=1.0, size=None) loc:指定期望 scale:指定方差 size:指定維度 創建默認期望與方差的一維數組示例代碼:

    import numpy as np
    
    # 創建默認期望與均值的一維數組
    a = np.random.normal(size=5)  # 默認期望loc=0.0,方差scale=1.0
    print(a)
    輸出結果:
    [ 0.68913158 -0.24866231  0.93683785 -0.33245719  1.56009623]

創建指定期望與方差的二維數組示例代碼:

    import numpy as np
    
    # 創建默認期望與均值的一維數組
    a = np.random.normal(loc=2, scale=3, size=(2, 3))  # 指定期望為2,方差為3的二維數組
    print(a)
    輸出結果:
    [[ 6.13038568  4.63502362  1.5378486 ]
     [ 0.47091329  2.1003756  -0.93129833]]

四、ndarray對象的屬性

Numpy最重要的一個特點是其N維數組對象ndarray,它是一系列同類型數據的集合,以0為下標開始進行集合中元素的索引。 ndarray對象是用於存放同類型元素的多維數組,ndarray中的每個元素在內存中都有相同存儲的大小的區域。 ndarray內部由以下內容組成:

  • 一個指向數據(內存或內存映射文件中的一塊數據)的指針。

  • 數據類型或dtype,描述在數組中固定大小值的格子。

  • 一個表示數組形狀(shape)的元組,表示各維度大小的元組。 在這里插入圖片描述

五、其他形式創建數組

5.1 zeros創建數組

zeros創建語法:zeros(shape, dtype=float, order=‘C’) Return a new array of given shape and type, filled with zeros.返回一個數組,給定形狀和類型,以0填充。 示例代碼: zreos創建一維數組

    import numpy as np
    
    # zeros函數創建一維列表
    a = np.zeros(5)  # 默認數據為浮點型,可指定數據類型
    print(a)
    輸出結果:
    [0. 0. 0. 0. 0.]

zreos創建二維數組

    import numpy as np
    
    # zeros函數創建二維列表
    b = np.zeros((2, 3), dtype=int)  # 默認數據為浮點型,可指定數據類型
    print(b)
    輸出結果:
    [[0 0 0]
     [0 0 0]]

5.2 ones創建數組

ones參數:ones(shape, dtype=None, order=‘C’) Return a new array of given shape and type, filled with ones.返回一個數組,給定形狀和類型,以1填充。 ones繪制一維數組示例代碼:

    import numpy as np
    
    c = np.ones(5, dtype=int)  # 默認數據為浮點型,可指定數據類型
    print(c)
    輸出結果:
    [1 1 1 1 1]

ones繪制二維數組示例代碼:

    import numpy as np
    
    # ones繪制二維數組
    d = np.ones((3, 4), dtype=int)  # 默認數據為浮點型,可指定數據類型
    print(d)
    輸出結果:
    [[1 1 1 1]
     [1 1 1 1]
     [1 1 1 1]]

5.3 empty創建數組

empty()方法用來創建一個指定形狀(shape)、數據類型(dtype)且為初始化的數組,里面的元素的值是之前內存的值。 empty語法:empty(shape, dtype=float, order=‘C’) order有C和F兩個選項,分別代表行優先和列優先,在計算機內存中的存儲的順序。 empty創建一維數組實例代碼:

    import numpy as np
    
    # empty創建一維數組
    e = np.empty(5)
    print(e)
    輸出結果:
    [8.73990362e+245 3.20929408e-220 1.63354242e-301 1.39249620e-309
     4.55718212e-303]

empty創建二維數組實例代碼:

    import numpy as np
    
    # empty創建二維數組
    f = np.empty((2, 3), dtype=float)
    print(f)
    輸出結果:
    [[6.23042070e-307 3.56043053e-307 7.56595733e-307]
     [8.45590539e-307 6.89807188e-307 9.34604358e-307]]

5.4 linspace創建等差數組

linspace函數用於創建一個一維數組,數組是一個等差數列構成的。 linspace語法:linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None): start:序列的起始值 stop:序列的終止值,如果endpoint=True則包含終止值 num:要生成的等步長樣本的數量,默認為50 endpoint:默認為True,為True時生成的數組包含終止值 restep:如果為True,生成的數組中會顯示間距,反之不顯示 dtype:ndarray的數據類型 linspace創建一維數組示例代碼:

    import numpy as np
    
    # linspsce創建一維數組
    g = np.linspace(1, 10, 12)	# 起始值為1,終止值為10,生成12個數據的等差數列數組
    print(g)
    輸出結果:
    [ 1.          1.81818182  2.63636364  3.45454545  4.27272727  5.09090909
      5.90909091  6.72727273  7.54545455  8.36363636  9.18181818 10.        ]

5.5 logspace創建等比數組

logspace語法:logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None): base參數為對數log的底數,其他參數同上。 logspace創建一維數組示例代碼:

    import numpy as np
    
    # logspac創建等比一維數組
    h = np.logspace(1, 10, 10, base=2)
    print(h)
    輸出結果:
    [   2.    4.    8.   16.   32.   64.  128.  256.  512. 1024.]

六、數組的切片和索引

ndarray對象的內容可以通過索引或切片來訪問和修改,與python中list的切片操作一樣。 ndarray數組可以基於0-n的下標進行索引,並設置start,stop,step參數進行,從原數組中切割出一個新的數組。

6.1 一維數組的切片和索引

  • 索引訪問

    import numpy as np
    
    a = np.arange(10)   # 生成一維數組
    # 正序索引訪問
    print(a[0], a[2])	輸出結果0 2
    # 負序索引訪問
    print(a[-1], a[-3])		輸出結果9 7
  • 切片操作

    import numpy as np
    
    a = np.arange(10)  # 生成一維數組
    # 切片操作
    print(a[1:-1:2])  #切取第二個元素到最后一個元素且步長為2
    輸出結果:
    [1 3 5 7]

6.2 二維數組的切片和索引

  • 索引訪問,訪問行數據 版本一:

    import numpy as np
    
    b = np.array([[1, 2, 3], [4, 5, 6]])  # 創建一個二維數組
    print(b[0])  # 訪問數組第0行
    輸出結果:
    [1 2 3]

版本二:

    import numpy as np
    
    b = np.arange(1, 13)  # 創建一個一維數組
    c = b.reshape((4, 3))  # 將一維數組轉換為二維數組
    print(c[0])  # 索引第一行
    輸出結果:
    [1 2 3]

索引具體值:

    import numpy as np
    
    b = np.arange(1, 13)  # 創建一個一維數組
    c = b.reshape((4, 3))  # 將一維數組轉換為二維數組
    print(c[0][2])  # 索引第一行
    輸出結果:
     3
  • 切片操作 切片的使用:[行進行切片,列進行切片] : [start:stop:step,start:stop:step]
    切取所有行所有列示例代碼:**

    import numpy as np
    
    b = np.arange(1, 13)  # 創建一個一維數組
    c = b.reshape((4, 3))  # 將一維數組轉換為二維數組
    print(c[:, :])	# 切取所有行所有列
    輸出結果:
    [[ 1  2  3]
     [ 4  5  6]
     [ 7  8  9]
     [10 11 12]]

切取所有行部分列示例代碼:

    import numpy as np
    
    b = np.arange(1, 13)  # 創建一個一維數組
    c = b.reshape((4, 3))  # 將一維數組轉換為二維數組
    
    print(c[:, 1])  # 切取所有行第二列
    輸出結果:
    [ 2  5  8 11]

切取部分行所有列示例代碼:

    b = np.arange(1, 13)  # 創建一個一維數組
    c = b.reshape((4, 3))  # 將一維數組轉換為二維數組
    print(c[0:2, :])  # 切取前兩行所有列
    輸出結果:
    [[1 2 3]
     [4 5 6]]

切取部分行部分列示例代碼:

    import numpy as np
    
    b = np.arange(1, 13)  # 創建一個一維數組
    c = b.reshape((4, 3))  # 將一維數組轉換為二維數組
    print(c[0:2, 0:2])  # 切取兩行兩列
    輸出結果:
    [[1 2]
     [4 5]]

坐標獲取具體值:[行,列] 坐標獲取單一值

    import numpy as np
    
    b = np.arange(1, 13)  # 創建一個一維數組
    c = b.reshape((4, 3))  # 將一維數組轉換為二維數組
    # 坐標獲取
    print(c[1, 2])
    輸出結果:
    6

坐標同時獲取不同行不同列

    import numpy as np
    
    b = np.arange(1, 13)  # 創建一個一維數組
    c = b.reshape((4, 3))  # 將一維數組轉換為二維數組
    # 使用坐標獲取多值
    print(c[(1, 2), (2, 0)])	# 獲取第二行第三列,第三行第一列
    輸出結果:
    [6 7]

負索引的使用

    import numpy as np
    
    b = np.arange(1, 13)  # 創建一個一維數組
    c = b.reshape((4, 3))  # 將一維數組轉換為二維數組
    # 負索引的使用
    print(c[-1])
    輸出結果:
    [10 11 12]

行倒序

    import numpy as np
    
    b = np.arange(1, 13)  # 創建一個一維數組
    c = b.reshape((4, 3))  # 將一維數組轉換為二維數組
    # 行倒序
    print(c[::-1])
    輸出結果:
    [[10 11 12]
     [ 7  8  9]
     [ 4  5  6]
     [ 1  2  3]]

行列倒序

    import numpy as np
    
    b = np.arange(1, 13)  # 創建一個一維數組
    c = b.reshape((4, 3))  # 將一維數組轉換為二維數組
    # 行列倒序
    print(c[::-1,::-1])
    輸出結果:
    [[12 11 10]
     [ 9  8  7]
     [ 6  5  4]
     [ 3  2  1]]

七、數組的復制

通過切片可以獲取到新數組,即使賦值給新的變量,但還是原來數組的視圖,如果對切片數組中的元素進行修改,則原數組也會改變。如果要復制數組則使用numpy中的copy方法即可 未使用copy方法的示例代碼:

    import numpy as np
    
    a = np.arange(1, 13).reshape((3, 4))
    # 對a數組進行切片處理,獲取第一二行,第一二列
    sub_a = a[:2, :2]
    print(sub_a)
    輸出結果:
    [[1 2]
     [5 6]]
    # 對sub_a中的第一行第一列的值進行修改
    sub_a[0][0] = 100	# 修改第一行第一列元素的值
    print(sub_a)
    輸出結果:
    [[100   2]
     [  5   6]]
    print(a)			# 改變切片數組的值,則原數組的數據也發生改變
    輸出結果:
    [[100   2   3   4]
     [  5   6   7   8]
     [  9  10  11  12]]

使用copy方法的示例代碼:

    import numpy as np
    
    a = np.arange(1, 13).reshape((3, 4)) #創建一個二維數組 
    sub_b = np.copy(a[:2, :2])	#切取第一二行,第一二列,同時復制給sub_b
    sub_b[0][0] = 200	# 修改第一行第一列元素的值
    print(sub_b)
    輸出結果:
    [[200   2]
     [  5   6]]
    print(a)		# 修改切片數組的值,不改變原數組的值
    輸出結果:
    [[ 1  2  3  4]
     [ 5  6  7  8]
     [ 9 10 11 12]]

八、改變數組的維度

處理數組的一項重要的工作就是改變數組的維度,包含提高數組的維度和降低數組的維度,還包括數組的轉置,Numpy提高的大量API可以很輕松地完成這些數組的操作,下面介紹改變數組維度的方法。

注意:修改數組時,不管修改到幾維,數據的個數應始終相等,否則報錯 示例:

    import numpy as np
    
    # arange方法創建一個一維數組
    a = np.arange(24)
    # reshape()方法改變數組的維度,裝換為二維,傳入元組也可
    b = a.reshape(4, 6)	#修改為(2,12),(12,2),(3,8),(8,3)也可,當個數必須相等。

上述代碼中將一維數組修改維二維數組,修改的數組的數據數4*6等於24,與一維數組中的個數相等。三維數組同理。

8.1 一維數組修改為多維數組

8.1.1 reshap方法

一維數組轉換為二維數組 示例代碼:

    import numpy as np
    
    # # reshape()方法改變數組的維度,裝換為二維,傳入元組也可
    a = np.arange(24)
    # reshape()方法改變數組的維度
    b = a.reshape(4, 6)
    print(b)
    輸出結果:
    [[ 0  1  2  3  4  5]
     [ 6  7  8  9 10 11]
     [12 13 14 15 16 17]
     [18 19 20 21 22 23]]

一維數組轉換為三維數組 示例代碼:

    import numpy as np
    
    # arange方法創建一個一維數組
    a = np.arange(24)
    # # 將一維轉換為三維數組
    c = a.reshape(2, 3, 4)
    print(c)
    輸出結果:
    [[[ 0  1  2  3]
      [ 4  5  6  7]
      [ 8  9 10 11]]
    
     [[12 13 14 15]
      [16 17 18 19]
      [20 21 22 23]]]

8.1.2 np.reshape()方法

語法:reshape(a, newshape, order=‘C’): a:表示要修改的數組 newshape:x修改后的數組形狀,傳入元組類型 一維數組轉換為二維數組示例代碼:

    import numpy as np
    
    # arange方法創建一個一維數組
    a = np.arange(24)
    # np.reshape()方法
    d = np.reshape(a, (4, 6))
    print(d)
    輸出結果:
    [[ 0  1  2  3  4  5]
     [ 6  7  8  9 10 11]
     [12 13 14 15 16 17]
     [18 19 20 21 22 23]]

一維數組轉換為三維數組示例代碼:

    import numpy as np
    
    # arange方法創建一個一維數組
    a = np.arange(24)
    # np.reshape()方法轉換為三維數組
    e = np.reshape(a, (2, 3, 4))
    print(e)
    輸出結果:
    [[[ 0  1  2  3]
      [ 4  5  6  7]
      [ 8  9 10 11]]
    
     [[12 13 14 15]
      [16 17 18 19]
      [20 21 22 23]]]

8.2 多維數組修改為一維數組

8.2.1 reshape()方法

reshape方法不僅可以將一維數組轉換為多維數組,還可以將多維數組轉換為一維數組。 reshape二維數組修改為一維數組示例代碼:

    import numpy as np
    
    # arange方法創建一個一維數組
    a = np.arange(24)
    # reshape()方法改變數組的維度,裝換為二維,傳入元組也可
    b = a.reshape(4, 6)
    # reshape()方法將二維數組修改為一維數組
    f = b.reshape(24)
    print(f)
    輸出結果:
    [ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]

reshape三維數組修改為一維數組示例代碼:

    import numpy as np
    
    # arange方法創建一個一維數組
    a = np.arange(24)
    # np.reshape()方法轉換為三維數組
    e = np.reshape(a, (2, 3, 4))
    # reshape()方法將三維數組修改為一維數組
    g = e.reshape(24)
    print(g)
    輸出結果:
    [ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]

8.2.2 reshape(-1)方法

調用該方法后,不管幾維數組,都轉化為一維數組。 示例代碼:

    import numpy as np
    
    # arange方法創建一個一維數組
    a = np.arange(24)
    # np.reshape()方法轉換為三維數組
    e = np.reshape(a, (2, 3, 4))
    # reshape()方法將三維數組修改為一維數組
    g = e.reshape(-1)
    print(g)
    輸出結果:
    [ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]

8.2.3 ravel()函數方法

使用該函數時,直接調用即可,這里舉例三維數組修改為一維數組,二維同理。 示例代碼:

    import numpy as np
    
    # arange方法創建一個一維數組
    a = np.arange(24)
    # 將一維轉換為三維數組
    c = a.reshape(2, 3, 4)
    # ravel函數修改
    h = c.ravel()
    print(h)
    輸出結果:
    [ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]

8.2.4 flatten()函數方法

使用該函數時,直接調用即可,這里舉例三維數組修改為一維數組,二維同理。 示例代碼:

    import numpy as np
    
    # arange方法創建一個一維數組
    a = np.arange(24)
    # 將一維轉換為三維數組
    c = a.reshape(2, 3, 4)
    # flatten()函數修改
    i = c.flatten()
    print(i)
    輸出結果:
    [ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]

九、數組的拼接

9.1 水平數組拼接

通過hstack函數可以將兩個或多個數組水平組合起來形成一個新的數組。 語法:hstack(tup): hstack函數接收的參數為元組或者列表形式 示例代碼:

    import numpy as np
    
    # 創建兩個二維數組
    a = np.array([[1, 2, 3], [4, 5, 6]])
    b = np.array([[10, 20, 30], [40, 50, 60]])
    # 調用hstack函數,參數為元組類型或着列表類型都可
    c = np.hstack((a, b))
    print(c)
    輸出結果:
    [[ 1  2  3 10 20 30]
     [ 4  5  6 40 50 60]]

9.2 垂直數組拼接

通過vstack函數可以將兩個或多個數組垂直組合起來形成一個新的數組。 語法: vstack(tup): vstack函數接收的參數為元組或是列表形式 示例代碼:

    import numpy as np
    
    # 創建兩個二維數組
    a = np.array([[1, 2, 3], [4, 5, 6]])
    b = np.array([[10, 20, 30], [40, 50, 60]])
    # 調用vstack函數,實現垂直方向拼接,參數為元組或是列表
    d = np.vstack([a, b])
    print(d)
    輸出結果:
    [[ 1  2  3]
     [ 4  5  6]
     [10 20 30]
     [40 50 60]]

9.3 concatenate數組拼接

語法:concatenate(arrays, axis=None, out=None) arrays:表示要拼接的數組 axis:拼接軸,默認為0。二維數組時有兩個軸,0代表x軸,1代表y軸。三維數組有三個軸2代表z軸。 out:ndarray,可選,如果提供,則指定放置結果的目的地。形狀必須是正確,如果不匹配,則匹配concatenate返回的值指定了out參數。 axis采用默認值也就是0時的示例代碼:

    import numpy as np
    
    # 創建兩個二維數組
    a = np.array([[1, 2, 3], [4, 5, 6]])
    b = np.array([[10, 20, 30], [40, 50, 60]])
    # concatenate的使用,axis默認為0時,相當於vstack
    e = np.concatenate((a, b), axis=0)
    print(e)
    輸出結果:
    [[ 1  2  3]
     [ 4  5  6]
     [10 20 30]
     [40 50 60]]
      # 當axis=0時,shape為x軸的數據的疊加,2+2=4
     (4, 3)

axis=1時的示例代碼:

    import numpy as np
    
    # 創建兩個二維數組
    a = np.array([[1, 2, 3], [4, 5, 6]])
    b = np.array([[10, 20, 30], [40, 50, 60]])
    # concatenate的使用,axis默認為1時,相當於hstack
    e = np.concatenate((a, b), axis=1)
    print(e, e.shape)
    輸出結果:
    [[ 1  2  3 10 20 30]
     [ 4  5  6 40 50 60]]
     #	當axis=1時,shape為y軸的數據的疊加,3+3=6
     (2, 6)

三維數組axis=2的拼接

    import numpy as np
    
    # 創建兩個三維數組
    f = np.arange(1, 13).reshape(1, 2, 6)
    g = np.arange(13, 25).reshape(1, 2, 6)
    # concatenate的使用,axis=2時
    h = np.concatenate((f, g), axis=2)
    print(h, h.shape)
    輸出結果:
    [[[ 1  2  3  4  5  6 13 14 15 16 17 18]
      [ 7  8  9 10 11 12 19 20 21 22 23 24]]] 
      # 當axis=2時,shape為z軸的數據的疊加,6+6=12
      (1, 2, 12)

十、數組的分割

10.1 split()方法分割

語法:split(ary, indices_or_sections, axis=0) ary:被分割的數組 indices_or_sections:如果是一個整數,就用該數平均切分,如果是一個數組,為沿軸切分的位置。 axis:沿着哪個維度進行切向,默認為0,橫向切分。為1時,縱向切分。

10.1.1 一維數組分割

平均分割示例代碼:

    import numpy as np
    
    # split分割一維數組
    x = np.arange(1, 9)
    # 傳遞整數,采用平均分割
    a = np.split(x, 4)
    print(a)
    輸出結果:
    [array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]

傳遞數組,按位置分割:

    import numpy as np
    
    # split分割一維數組
    x = np.arange(1, 9)
    # 傳遞數組,按位置分割
    b = np.split(x, [3, 5])	#(1,2,3)為一組,(3,4)為一組,(6,7,8)為一組
    print(b)
    輸出結果:
    [array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]

10.1.2 二維數組分割

注意:使用平均分割時,數組必須能夠平均分割,如果不能平均分割,則會報錯。 平均分割垂直方向示例代碼:

    import numpy as np
    
    # 創建一個二維數組
    x = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]])
    # 將x按垂直方向平均分割為兩份,且分別接收
    a, b = np.split(x, 2, axis=0)
    print(a)
    print(b)
    輸出結果:
    [[1 2 3]
     [4 5 6]]
     
    [[ 7  8  9]
     [10 11 12]]

平均分割水平方向示例代碼:

    import numpy as np
    
    x = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]])
    # 將x按水平方向平均分割為三份,且分別接收
    a, b, c = np.split(x, 3, axis=1)
    print(a, b, c)
    輸出結果:
    [[ 1]
     [ 4]
     [ 7]
     [10]] 
     
     [[ 2]
     [ 5]
     [ 8]
     [11]] 
    
     [[ 3]
     [ 6]
     [ 9]
     [12]]

傳遞數組,垂直方向,按位置分割:

    import numpy as np
    
    x = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]])
    # 將x按垂直方向按位置分割為三份,且分別接收
    c, d, f = np.split(x, [1, 2], axis=0)
    print(c)
    print(d)
    print(f)
    輸出結果:
    [[1 2 3]]
    
    [[4 5 6]]
    
    [[ 7  8  9]
     [10 11 12]]

傳遞數組,水平方向,按位置分割:

    import numpy as np
    
    x = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]])
    # 將x按水平方向按位置分割為三份,且分別接收
    g, h, i = np.split(x, [1, 2], axis=1)
    print(g)
    print(h)
    print(i)
    輸出結果:
    [[ 1]
     [ 4]
     [ 7]
     [10]]
     
    [[ 2]
     [ 5]
     [ 8]
     [11]]
     
    [[ 3]
     [ 6]
     [ 9]
     [12]]

10.2 hsplite()方法水平分割

使用hsplit函數可以水平分割數組,該函數有兩個參數,第一個參數為待分割的數組,第二個參數表示要將數組水平分割成幾個小組。 注意:使用平均分割時,數組必須能夠平均分割,如果不能平均分割,則會報錯。 hsplit()水平方向平均分割示例代碼

    import numpy as np
    
    x = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]])
    # 使用hsplit()水平方向分割
    a, b, c = np.hsplit(x, 3)
    print(a)
    print(b)
    print(c)
    輸出結果:
    [[ 1]
     [ 4]
     [ 7]
     [10]]
     
    [[ 2]
     [ 5]
     [ 8]
     [11]]
     
    [[ 3]
     [ 6]
     [ 9]
     [12]]

hsplit()水平方向按位置分割示例代碼

    import numpy as np
    
    x = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]])
    # 使用hsplit()水平方向位置分割
    a, b, c = np.hsplit(x, [1, 2])
    print(a)
    print(b)
    print(c)
    輸出結果:
    [[ 1]
     [ 4]
     [ 7]
     [10]]
     
    [[ 2]
     [ 5]
     [ 8]
     [11]]
     
    [[ 3]
     [ 6]
     [ 9]
     [12]]

10.3 vsplite()方法垂直分割

注意:使用平均分割時,數組必須能夠平均分割,如果不能平均分割,則會報錯。 vsplit()垂直方向平均分割示例代碼

    import numpy as np
    
    x = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]])
    # 使用vsplit()垂直方向平均分割
    a, b = np.vsplit(x, 2)
    print(a)
    print(b)
    輸出結果:
    [[1 2 3]
     [4 5 6]]
     
    [[ 7  8  9]
     [10 11 12]]

vsplit()垂直方向按位置分割示例代碼

    import numpy as np
    
    x = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]])
    # 使用vsplit()垂直方向按位置分割
    a, b, c = np.vsplit(x, [2, 3])
    print(a)
    print(b)
    print(c)
    輸出結果:
    [[1 2 3]
     [4 5 6]]
     
    [[7 8 9]]
    [[10 11 12]]

十一、數組的轉置

調用transpose()方法可以轉置我們的數組。 語法:transpose(a, axes=None) a:要轉置的數組 axes:對於多維數組轉置時需要傳遞這個參數,參數為想要成的維度元組

二維數組的轉置具體代碼如下:

    import numpy as np
    
    # 創建一個二維數組
    x = np.arange(1, 13).reshape((2, 6))
    print(x)
    輸出結果:
    [[ 1  2  3  4  5  6]
     [ 7  8  9 10 11 12]]
    a = np.transpose(x)
    print(a)
    輸出結果:
    [[ 1  7]
     [ 2  8]
     [ 3  9]
     [ 4 10]
     [ 5 11]
     [ 6 12]]

二維數組.T方法轉置數組 具體代碼如下:

    import numpy as np
    
    # 創建一個二維數組
    x = np.arange(1, 13).reshape((2, 6))
    print(x)
    輸出結果:
    [[ 1  2  3  4  5  6]
     [ 7  8  9 10 11 12]]
     # .T方法轉置數組
    b = x.T
    print(b)
    輸出結果:
    [[ 1  7]
     [ 2  8]
     [ 3  9]
     [ 4 10]
     [ 5 11]
     [ 6 12]]

三維數組的轉置 對於三維數組x[ i ],[ j ] ,[ k ] 進行轉置,默認的將 i 和 k 進行交換 示例代碼:

    import numpy as np
    
    # 創建一個三維數組
    x = np.arange(1, 25).reshape((2, 3, 4))
    print(x)
    輸出結果:
    [[[ 1  2  3  4]
      [ 5  6  7  8]
      [ 9 10 11 12]]
    
     [[13 14 15 16]
      [17 18 19 20]
      [21 22 23 24]]]
    # 三維數組的轉置
    c = np.transpose(x)
    print(c)
    輸出結果:
    [[[ 1 13]
      [ 5 17]
      [ 9 21]]
    
     [[ 2 14]
      [ 6 18]
      [10 22]]
    
     [[ 3 15]
      [ 7 19]
      [11 23]]
    
     [[ 4 16]
      [ 8 20]
      [12 24]]]

指定轉置后維度

    import numpy as np
    
    # 創建一個三維數組
    x = np.arange(1, 25).reshape((2, 3, 4))
    print(x)
    輸出結果:
    [[[ 1  2  3  4]
      [ 5  6  7  8]
      [ 9 10 11 12]]
    
     [[13 14 15 16]
      [17 18 19 20]
      [21 22 23 24]]]
    # 三維數組的轉置
    c = np.transpose(x, (1, 0, 2))  # (1,0,2)表示想要轉置數組的維度,本例為三個兩行四列的數組
    print(c)
    輸出結果:
    [[[ 1  2  3  4]
      [13 14 15 16]]
    
     [[ 5  6  7  8]
      [17 18 19 20]]
    
     [[ 9 10 11 12]
      [21 22 23 24]]]

十二、函數

如果參與運算的兩個對象,都是ndarray,並且形狀相同,那么會對位彼此之間進行加減乘除運算。Numpy算數函數包含簡單的加減乘除:add(),subtract(),multiply()和divide()。

12.1算數函數

12.1.1 加法運算

一維數組運算時,會發生廣播從而完成運算 示例代碼:

    import numpy as np
    
    # 創建兩個數組
    a = np.arange(9, dtype=float).reshape(3, 3)
    b = np.array([10, 10, 10])
    # 加法運算,以下兩種方法均可,輸出的結果相同
    print(np.add(a, b))
    print(a + b)
    輸出結果:
    [[10. 11. 12.]
     [13. 14. 15.]
     [16. 17. 18.]]

12.1.2 減法運算

    import numpy as np
    
    a = np.arange(9, dtype=float).reshape(3, 3)
    b = np.array([10, 10, 10])
    # 減法運算,以下兩種方法均可,輸出的結果相同
    print(np.subtract(a, b))
    print(a-b)
    輸出結果:
    [[-10.  -9.  -8.]
     [ -7.  -6.  -5.]
     [ -4.  -3.  -2.]]

12.1.3 乘法運算

    import numpy as np
    
    a = np.arange(9, dtype=float).reshape(3, 3)
    b = np.array([10, 10, 10])
    # 乘法運算,以下兩種方法均可,輸出的結果相同
    print(np.multiply(a, b))
    print(a*b)
    輸出結果:
    [[ 0. 10. 20.]
     [30. 40. 50.]
     [60. 70. 80.]]

12.1.4 除法運算

    import numpy as np
    
    a = np.arange(9, dtype=float).reshape(3, 3)
    b = np.array([10, 10, 10])
    # 除法運算,以下兩種方法均可,輸出的結果相同
    print(np.divide(a, b))
    print(a/b)
    輸出結果:
    [[0.  0.1 0.2]
     [0.3 0.4 0.5]
     [0.6 0.7 0.8]]

12.1.5 out參數的使用

本示例用乘法示例,其他運算同理。

    import numpy as np
    
    a = np.arange(9, dtype=float).reshape(3, 3)
    # out參數的使用
    c = np.empty((3, 3))    # 創建一個3行3列的空數組
    np.multiply(a, 10, out=c)   # 將a*10得到的數組傳輸給c空數組
    print(c)
    輸出結果:
    [[ 0. 10. 20.]
     [30. 40. 50.]
     [60. 70. 80.]]

12.1.6 sin()函數使用

本例以sin函數示例,其他三角函數同理

    import numpy as np
    
    # sin函數的使用
    a = np.array([0, 30, 45, 60, 90])
    # 轉換為弧度
    print(np.sin(a))
    輸出結果:
    [ 0.         -0.98803162  0.85090352 -0.30481062  0.89399666]

12.1.7 四舍五入

around()函數提供了四舍五入的方法 語法:numpy.around(a, decimals) a:數組 decimals:舍入的小位數。默認為0,如果為負值,整數將四舍五入到小數點左側的位置。 示例代碼:

    import numpy as np
    
    # 創建一個數組
    a = np.array([10.2, 1.233, 3.55, 6.7845])
    # 四舍五入方法
    b = np.around(a)
    print(b)
    輸出結果:
    [10.  1.  4.  7.]

12.1.8 向上取值函數

ceil()函數提供了向上取值的方法。用法同四舍五入方法相同。 示例代碼:

    import numpy as np
    
    a = np.array([10.2, 1.233, 3.55, 6.7845])
    # 向上取值函數
    c = np.ceil(a)
    print(c)
    輸出結果:
    [11.  2.  4.  7.]

12.1.9 向下取值函數

floor()函數提供了向下取值的方法。用法同四舍五入方法相同。 示例代碼:

    import numpy as np
    
    a = np.array([10.2, 1.233, 3.55, 6.7845])
    # 向下取值函數
    d = np.floor(a)
    print(d)
    輸出結果:
    [10.  1.  3.  6.]

12.2聚合函數

12.2.1 部分聚合函數

Numpy提高了很多的聚合函數,以下為部分聚合函數。 在這里插入圖片描述

12.2.2 部分聚合函數示例

12.2.2.1 power()函數示例

numpy.power()函數將第一個輸入數組中的元素作為底數,計算它與第二個輸入數組中相應元素的冪。 power()函數示例:

    import numpy as np
    
    # 創建一個二維數組
    a = np.arange(12).reshape((3, 4))
    print(a)
    輸出結果:
    [[ 0  1  2  3]
     [ 4  5  6  7]
     [ 8  9 10 11]]
    # 將數組中的每一個元素運行冪運算
    e = np.power(a, 2)
    print(e)
    輸出結果:
    [[  0   1   4   9]
     [ 16  25  36  49]
     [ 64  81 100 121]]
12.2.2.2 median()函數示例

median()函數的使用 一維數組的中位數

    import numpy as np
    
    # 創建一個一維數組
    f = np.array([2, 4, 3, 1, 2])  # 對數組排序,數組中的元素為偶數,中位數值:中間兩個數的平均值。如果為奇數,中間的數
    # 取中位數
    g = np.median(f)
    print(g)
    輸出結果:
    2.0

二維數組取中位數示例代碼 二維數組的中位數,要通過axis指定軸

    import numpy as np
    
    # 創建一個二維數組。二維數組的中位數,要通過axis指定軸
    h = np.arange(1, 13).reshape((3, 4))
    print(h)
    輸出結果:
    [[ 1  2  3  4]
     [ 5  6  7  8]
     [ 9 10 11 12]]
    i = np.median(h, axis=0)  # axis=0表示垂直方向取中位數
    j = np.median(h, axis=1)  # axis=1表示水平方向取中位數
    print(i)
    輸出結果:
    [5. 6. 7. 8.]
    print(j)
    輸出結果:
    [ 2.5  6.5 10.5]
12.2.2.3 mean()函數示例

一維數組求平均數

    import numpy as np
    
    # 創建一個一維數組
    f = np.array([2, 4, 3, 1, 2])
    # 求一維數組平均數
    k = np.mean(f)
    print(k)
    輸出結果:
    2.4

二維數組求平均數

    import numpy as np
    
    # 創建一個二維數組。二維數組的平均數,要通過axis指定軸
    h = np.arange(1, 13).reshape((3, 4))
    print(h)
    輸出結果:
    [[ 1  2  3  4]
     [ 5  6  7  8]
     [ 9 10 11 12]]
    # 二維數組求平均數,axis指定軸求平均
    l = np.mean(h, axis=0)  # 垂直方向求平均數
    m = np.mean(h, axis=1)  # 水平方向求平均數
    print(l)
    輸出結果:
    [5. 6. 7. 8.]
    print(m)
    [ 2.5  6.5 10.5]

 


免責聲明!

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



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