NumPy(1)-常用的初始化方法

2023-07-16 18:00:44

一、NumPy介紹

  NumPy是Python中科學計算的基礎包,它是一個Python庫,提供多維陣列物件,各種派生物件(如掩碼陣列和矩陣),以及用於陣列快速操作的各種API,有包括數學、邏輯、形狀操作、排序、選擇、輸入輸出、離散傅立葉變換、基本線性代數,基本統計運算和隨機模擬等等。

  • 功能強大的N維陣列物件。
  • 精密廣播功能函數。
  • 整合 C/C+和Fortran 程式碼的工具。
  • 強大的線性代數、傅立葉變換和亂數功能。

二、Ndarray介紹

  NumPy 最重要的一個特點是其 N 維陣列物件 ndarray,它是一系列同型別資料的集合,以 0 下標為開始進行集合中元素的索引。ndarray 物件是用於存放同型別元素的多維陣列。ndarray 中的每個元素在記憶體中都有相同儲存大小的區域。

三、Ndarray和python中的list列表的區別

  C陣列:學過C語言的都知道,在C語言中陣列是一個連續的記憶體空間,並且陣列中的資料的型別也是一致的。

  python列表:python中的列表裡面存放的物件,可以是不同的資料型別。其底層實現是通過類似C語言中的指標陣列來實現,即python的列表中存放的資料的指標即他們的地址,然後再根據這個指標找到具體的資料。

  Ndarray陣列:和C語言陣列實現類似,也是一段連續的記憶體空間,裡面存放的也是相同的資料型別。

  詳細如下:

  • NumPy 陣列在建立時具有固定的大小,與Python的原生陣列物件(可以動態增長)不同。更改ndarray的大小將建立一個新陣列並刪除原來的陣列。
  • NumPy 陣列中的元素都需要具有相同的資料型別,因此在記憶體中的大小相同。
  • NumPy 陣列有助於對大量資料進行高階數學和其他型別的操作。通常,這些操作的執行效率更高,比使用Python原生陣列的程式碼更少。

四、初始化NumPy陣列

  1、安裝 numpy 包

    pip3 install numpy

  2、匯入 numpy 包

    import numpy

  3、使用一個列表初始化一個NumPy陣列

    函數作用:初始化一個NumPy陣列

    函數原型:numpy.array(object, dtype=None, *, copy=True, order='K', subok=False, ndmin=0)

    引數範例:

      * object: 必填引數:即建立NumPy陣列的資料物件

      * dtype: 可選引數,通過它可以更改陣列的資料型別---可將原來的整型或者其他型別進行強制轉換

      * copy: 可選引數,當資料來源是ndarray 時表示陣列能否被複制,預設是True

      * order: 可選引數,以哪種記憶體佈局建立陣列,有3個可選值,分別是C(行序列)/F(列序列)/A(預設)

      * ndmin: 可選引數,用於指定陣列的維度--例如 一維陣列、二維陣列、三維陣列等

      * subok: 可選引數,型別為bool值,預設為False。 為True,使用object的內部資料型別; 為False 使用object陣列的資料型別

    程式碼範例:

    

     注意:

      * 其中np_array就是Ndarray型別。

      * data_list中的資料型別是不一致,但是轉化成np_array後,資料格式一致了,都變成了字串型別。

      * 如果傳進來的列表包含不同的型別,則統一轉化為同一型別,轉化的優先順序:str>float>int,即有str則都轉化為str,這樣才能保證NumPy陣列中陣列的一致性。

  4、numpy.ones()

    函數作用:創造出來的陣列裡面填充的都是1

    函數原型:numpy.ones(shape, dtype=None, order='C', *, like=None)

    引數解釋:

      * shape:建立出來陣列的形狀,是一維陣列,還是二維陣列,還是多維陣列等等

      * dtype:資料的型別

      * order:指定記憶體重以行優先(‘C’)還是列優先(‘F’)順序儲存多維陣列。

    程式碼範例:

    

     注意:

      shape = (m,n) m行n列, 二維陣列

      shape = (m)  m個元素的一維陣列 [1,2,3]

      shape = (m, ) m個元素的一維陣列

      shape = (m, 1) m行1列 二維陣列 [[1],[2],[3]]

      shape = (1,m) 1行m列 二維陣列 [[1,2,3]]

   5、numpy.zeros()

    函數作用:其用法和ones()一樣,只不過被填充的由1變成了0

    函數原型:zeros(shape, dtype=float, order='C', *, like=None)
 
            程式碼範例:
    

   6、numpy.ful()

    函數作用:使用自己指定數位填充陣列內容

    函數原型:numpy.full(shape, fill_value, dtype=None, order='C', *, like=None)

     程式碼範例:

    

  7、numpy.linspace()

    函數作用: 生成等差數列的陣列

    函數原型:linspace(start, stop, num=50,endpoint=True,retstep=False,dtype=None)

    引數解釋:

      * start,起始點
      * stop,結束點
      * num,元素個數,預設 50
      * endpoint,是否包含 stop 數值,預設為 True,包含 stop 值;若為 False,則不包含 stop 值
      * retstep,返回值形式,預設為 False,返回等差數列組,若為True,則返回結果 (array([‘samples’, ‘step’]))
      * dtype,返回結果的資料型別,預設無,若無,則參考輸入資料型別
    

    程式碼範例:

    

  

  8、numpy.arange()

    函數作用:根據步長生成等差數列

    函數原型:arange([start,] stop[, step,], dtype=None, *, like=None)

    程式碼範例:

    

  9、numpy.random.randint()

    函數作用:使用亂數建立NumPy陣列

    函數原型:randint(low, high=None, size=None, dtype=int)

    引數範例:

      * low:亂數的最小值

      * higt:亂數的最大值

      * size:生出陣列的形狀

      * dtype:資料型別

    程式碼範例:

    

     注意:類似的函數還有下面幾個,用法也類似

      * numpy.random.random(size): 隨機生成小數的NumPy的陣列

      * numpy.random.randn(d0, d1, ..., dn): 標準正態分佈

      * np.random.normal(): 普通正態分佈

 五、ndarray的屬性

  通過上面的範例,我們看到有幾個屬性是ndarray常用的屬性,這裡我們總結如下:

  四個必記的屬性

    * ndim: 維度

    * shape: 形狀

    * size: 總長度

    * dtype: 元素型別

  程式碼範例: