亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

Numpy 的 ndarray 對象

本小節將詳述如何創建 ndarray 對象,以及如何創建特殊的 ndarray 對象。

1. ndarray 對象

ndarray,也就是我們常用的 N 維數組對象,是 Numpy 最核心的組成部分。你可以把它視為一個快速而靈活的大數據集容器,利用這種數組你可以便捷地執行一些數學運算。

ndarray 有兩個顯著特點:

  • ndarray 是一個通用的同構數據多維容器,也就是說,該容器中的每一個元素都必須是相同類型的,且每個元素在內存中都有相同存儲大小的區域;
  • ndarray 具有矢量算術運算能力和復雜的廣播能力,并具有執行速度快和節省空間的特點。

2. 創建 ndarray

2.1 numpy.array 函數

創建數組對象最簡單的方法是利用 array 函數,該函數的輸入為序列型對象,輸出為一個含有傳入數據的 Numpy 數組。 array 函數的常用調用參數如下:

numpy.array(object, dtype=None, copy=True, ndmin=0)
參數 說明
object array的主要輸入參數,可以是數組、有序序列,或者是嵌套的序列
dtype 數據類型,用來指定生成的ndarray數據結構的元素類型
copy 對象是否被復制,默認為True
ndmin 指定返回數組的最小維數

Tips:關于數據類型相關知識,我們會在下個小節詳細講解。

案例

以列表轉換為例:

import numpy as np

data0 = [1, 4, 3, 7, 2]
arr0 = np.array(data0)
arr0

這里通過 array 函數,輸入列表,輸出一個數組對象。

Out:
    array([1, 4, 3, 7, 2])

在上述案例中,并未指定dtype。這是因為在通常情況下,np.array函數會嘗試為新建的數組推斷出一個合理的數據類型:

arr0.dtype
Out:
    dtype('int32')

可以看到自動創建的數據類型為int32。

案例

當然了,你可以在開始的時候,利用dtype參數,顯式地指定數組元素的數據類型。這里我們以一個嵌套列表為例,進行說明:

data1 = [[1, 2, 3.2], [4, 5.1, 6], [7.3, 8, 9]]
arr1 = np.array(data1, dtype='float')
arr1

這里通過 array 函數,輸入嵌套列表,并同時指定數據類型為 float,輸出對應的數組對象。

Out:
    array([[1. , 2. , 3.2],
           [4. , 5.1, 6. ],
           [7.3, 8. , 9. ]])

查看數組對象的數據類型為float64。

arr1.dtype
Out:
    dtype('float64')

案例

也可以利用 ndmin 參數,手動指定創建數組的維數:

arr2 = np.array(data0, ndmin=2)
arr2
Out:
    array([[1, 4, 3, 7, 2]])

這里利用 ndmin 參數,手動創建了一個二維數組。

3. 常用的 ndarray 創建函數

np.array 之外,Numpy 內置了一些其他方法,可以快速創建一些具有特殊特征的數組。比如,利用 zeros 函數和 ones 函數可以創建一個指定大小的全 0 或全 1 的數組。

3.1 numpy.zeros 函數

zeros 函數可以創建一個指定大小的、以 0 來填充的數組。

案例

創建一個長度為 4 的全 0 數組:

np.zeros(4)
Out:
    array([0., 0., 0., 0.])

3.2 numpy.ones 函數

ones 函數可以創建一個指定大小的、以 1 來填充的數組。

案例

創建一個大小為 3×3 的全 0 數組方陣:

np.ones((3,3))
Out:
    array([[1., 1., 1.],
           [1., 1., 1.],
           [1., 1., 1.]])

需要注意的是,對于創建 2 維及以上的數組時,zeros函數和 ones 函數接收一個表示數組大小的元組 tuple 作為輸入。

3.3 numpy.empty 函數

類似的,empty 函數用來創建一個指定大小的、沒有具體值的數組。

案例

這里我們創建一個 3×2×3 的三維空數組:

np.empty((3,2,3))
Out:
    array([[[4.67296746e-307, 1.69121096e-306, 1.33511018e-306],
            [1.33511018e-306, 1.86917476e-306, 1.11256817e-306]],

           [[1.06811422e-306, 1.42417221e-306, 1.11260619e-306],
            [8.90094053e-307, 1.86919378e-306, 1.06809792e-306]],

           [[1.37962456e-306, 1.69111861e-306, 1.78020169e-306],
            [1.37961777e-306, 7.56599807e-307, 7.56599806e-307]]])

這里要注意一下 empty 函數的輸出。因為 empty 考慮到輸出全 0 數組是不安全的想法,因此很多情況下,它返回的是一些沒有規律的垃圾值。

Numpy 還提供了創建單位方陣(對角線為 1,其余為 0)的方法:identity 和 eye。

3.4 numpy.identity 函數

identity 函數用來創建一個指定大小的單位矩陣(對角線為 1 的數組)。

案例

這里我們利用 identity 函數來創建一個大小為 3×3 的單位矩陣:

np.identity(3)
Out:
    array([[1., 0., 0.],
           [0., 1., 0.],
           [0., 0., 1.]])

3.5 numpy.eye 函數

eye 函數用來創建一個指定大小的、對角線為 1 的數組。

eye 函數是 identity 的升級版本。eye 函數的原型如下:

np.eye(N, M=None, k=0, dtype=<typefloat>)

當 k 為默認值時,eye 函數可以創建大小為 N×M,主對角線為 1 的矩陣。

案例

創建一個大小為 3×4 的主對角線為 1 的數組。

np.eye(N=3, M=4)
Out:
    array([[1., 0., 0., 0.],
           [0., 1., 0., 0.],
           [0., 0., 1., 0.]])

案例

當 k、M 均為默認值時,eye 函數的功能和 identity 一致。

例如,利用 eye 函數創建一個大小為 3×3 的單位矩陣。

np.eye(N=3)
Out:
    array([[1., 0., 0.],
           [0., 1., 0.],
           [0., 0., 1.]])

k 表示為 1 的對角線的偏移量,當 k 大于 0 時,表示向右偏移。

例如,創建一個大小為 3×4 的數組,為 1 的對角線向右偏移一位:

np.eye(N=3, M=4, k=1)
Out:
    array([[0., 1., 0., 0.],
           [0., 0., 1., 0.],
           [0., 0., 0., 1.]])

4. 小結

本小節重點講述了如何利用序列型對象,創建一個數組序列;以及如何創建常用的特殊數組,例如:全 0 數組、全 1 數組,全空數組、對角線為 1 的數組等。