NumPy 學習筆記(一)

NumPy:python

  一、NumPy 是一個功能強大的第三方庫(須要本身安裝),主要用於對多維數組執行計算;程序員

     它提供了大量的庫函數和操做,能夠幫助程序員更輕鬆地進行數值計算算法

  二、能夠和另外兩個第三方庫 SciPy 和 Matplotlib 一塊兒使用從而在必定程度上替換對 Matlab 的使用 數組

  三、主要應用:數據結構

    ①數學運算:NumPy 對於執行各類數學運算很是有用,如數值積分、微分、內插、外推以及矩陣的內積、外積、特徵向量等。dom

    ②圖像處理和計算機圖形學:計算機中的圖像表示爲多維數字數組。NumPy 成爲一樣狀況下最天然的選擇。機器學習

        實際上,NumPy 提供了一些優秀的庫函數來快速處理圖像。例如,鏡像圖像、按特定角度旋轉圖像等函數

    ③機器學習模型:在編寫機器學習算法時,須要對矩陣進行各類數值計算。例如矩陣乘法、換位、加法等性能

 

NumPy 數組:學習

  一、NumPy 提供最重要的數據結構是一個稱爲 ndarray 的 N 維數組類型。 它描述相同類型的元素集合,NumPy 數組是一般的 Python 數組的擴展

     ndarray 配備了大量的函數和運算符,能夠幫助咱們快速編寫各類類型計算的高性能代碼每一個元素在內存中使用相同大小的塊

  二、NumPy 數組的建立方法:

    ①從其餘 python 數據類型(如:列表、元組等)轉換過來

    ②NumPy 原生數組的建立(經過 arange、ones、zeros 等建立)

    ③使用特殊庫函數(例如,random)建立

    ④從磁盤讀取數組,不管是標準格式仍是自定義格式

    經過使用字符串或緩衝區從原始字節建立數組

import numpy as np lst = [1, 2, 3] arr = np.array(lst) # 輸出 Type: <class 'numpy.ndarray'> # arr: [1 2 3]
print("Type: ", type(arr), "\narr: ", arr) # numpy.arange(star, end, step) 返回 [star, end) 隔 step-1 的各個元素 # 輸出 [1 3 5 7 9]
arr = np.arange(1, 10, 2) print("arr", arr, sep=" = ") # numpy.random.randn(size) 建立一個長度爲 size 的服從標準正態分佈的隨機數組
arr = np.random.randn(5) print("arr: ", arr) # numpy.random.random(size) 建立一個範圍爲 [0, 1),長度爲 size 的服從均勻分佈的隨機數組
arr = np.random.random(5) print("arr: ", arr) # numpy.linspace(star, end, size) 建立一個長度爲 size,範圍爲 [star, end] 的數組 # 輸出 [0. 2.5 5. 7.5 10.]
arr = np.linspace(0, 10, 5) print("arr: ", arr) # numpy.zeros(shape) 建立一個用 0 填充,形狀爲 shape 的數組
a = np.zeros((2, 2)) print("a", a, sep=" = ") b = np.ones((2, 2)) print("b", b, sep=" = ") c = np.full((2, 2), 7)  # 建立一個 2*2 矩陣,並填充 7
print("c", c, sep=" = ") d = np.eye(3)  # 建立一個 3*3 的單位矩陣
print("d", d, sep=" = ")

注:np.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0) 裏,

  object 表示任何暴露數組接口方法的對象都會返回一個數組或任何(嵌套)序列;

  dtype 爲數組的數據類型,可選;copy 可選,默認爲true,表示對象是否被複制;order 裏 C(按行)、F(按列)或A(任意,默認);

  subok 默認狀況下,返回的數組被強制爲基類數組。 若是爲true,則返回子類;ndmin 指定返回數組的最小維數

 

import numpy as np # 原本是一個一維數組,但經過 ndmin=2 使得數組最小維度爲2維 # 輸出 arr: [[1 2 3 4]] 注意爲 2 維數組
arr = np.array([1, 2, 3, 4], ndmin=2) print("arr", arr, sep=": ") # 輸出 arr: [[1 2] [3 4]],由於其維度大於最小維度
arr = np.array([[1, 2], [3, 4]], ndmin=1) print("arr", arr, sep=": ") # 指定數據類型爲複數
arr = np.array([1, 2, 3], dtype=complex) # 輸出 arr: [1.+0.j 2.+0.j 3.+0.j]
print("arr", arr, sep=": ")

 

  三、數組屬性:

    ①shape:返回數組形狀,如 (2, 3) 表示 2 行 3 列的 2 維數組

    ②ndim:返回數組維度

    ③size:返回數組裏元素個數

    ④itemsize:返回數組中每一個元素的字節單位長度

     ⑤T:轉置矩陣,但不會改變原矩陣

    ⑥flags:返回對象的內存信息

    ⑦real:返回元素的實部

    ⑧imag:返回元素的虛部

    ⑨data:包含實際數組元素的緩衝區,因爲通常經過數組的索引獲取元素,因此一般不須要使用這個屬性

import numpy as np # shape 這一數組屬性返回一個包含數組維度的元組,它也能夠用於調整數組大小
arr = np.array([[1, 2, 3], [4, 5, 6]]) arr_t = arr[:, 2] # 輸出列號爲 2 的全部元素,即 [3, 6]
print("arr_t[][2]: ", arr_t) # 輸出數組形狀,這裏爲 (2, 3)
print("The arr's shape: ", arr.shape) arr.shape = (3, 2)      # 修改形狀爲 3 行 2 列,注意形狀和元素個數
print("The new arr: ", arr) # 也能夠經過 reshape() 函數來調整大小,但不會改變原數組
temp = arr.reshape(2, 3) print(temp)     # 2 維數組,且數組裏有 3 個元素

# ndim 屬性返回數組維度
arr = np.arange(24)     # 建立 [0...23] 的數組
print(arr.ndim)     # 輸出 1
arr.shape = (2, 4, 3)   # 修改成 3 維數組
print("arr's ndim: ", arr.ndim)     # 輸出 3

# itemsize 這一數組屬性返回數組中每一個元素的字節單位長度
arr = np.array([1, 2, 3, 4, 5]) print("size: ", arr.size) print("itemsize: ", arr.itemsize)     # 輸出 4(整數默認爲 4 字節)

# dtype 返回數組元素類型
print("dtype: ", arr.dtype)     # 輸出 dtype: int32(即 4 字節)
arr.dtype = np.int8     # 修改整數類型
print("itemsize: ", arr.itemsize)     # 輸出 1
 arr = np.array([[1, 2, 3], [4, 5, 6]]) # 調用矩陣的 T 屬性,能夠轉置這個矩陣,但不會改變原矩陣
print("translate arr: ", arr.T) print("arr: ", arr) # 輸出元素的實虛部
arr = np.array([1+2j, 2+3j, 3+4j]) print("arr's real: ", arr.real)     # 輸出 [1. 2. 3.]
print("arr's imag: ", arr.imag)     # 輸出 [2. 3. 4.]

# 輸出對象的內存信息
print(arr.flags)

 

    四、數組的簡單運算:

      大部分數學運算均只對在相應元素進行,如運算四則運算加減乘除,而且運算支持廣播

      (即不一樣形狀的數組若是符合某種條件則能夠進行運算)!

      若要進行矩陣乘法則須要函數 dot() 或運算符 @

import numpy as np arr_one = np.array([[1.0, 2.0], [3.0, 4.0]]) arr_two = np.array([[5.0, 6.0], [7.0, 8.0]]) # 四則運算時對應元素進行運算
sum = arr_one + arr_two dif = arr_one - arr_two mul = arr_one * arr_two quo = arr_one / arr_two matrix_product = arr_one.dot(arr_two)       # 矩陣乘法
print(("sum: ", sum), ("dif: ", dif), ("mul: ", mul), ("quo: ", quo), sep="\n") print("matrix_product: ", matrix_product) # 大小比較也是經過對應元素進行的
print("arr_one < arr_two = ", arr_one < arr_two) print("arr_one ** 2", arr_one ** 2, sep=" = ") # @ 能夠用於矩陣乘法
print("matrix_product: ", arr_one @ arr_two)
相關文章
相關標籤/搜索