首頁>教育>

一、標量、向量、矩陣與張量1. 標量(scalar)一個標量就是一個單獨的數。標量用斜體表示。標量通常使用小寫變數名稱。

在介紹標量時,會明確它是哪種型別的數,如:

定義實數標量時,可能會說: “令 s ∈ R 表示一條線的斜率”;在定義自然數標量時,可能會說 “令 n ∈ N ”表示元素的數目。2. 向量(vector)一個向量是一列數,這些數是有序排列的。向量中的元素可以用 x1這樣來表示 。3. 行列式

行列式在數學中,是一個函式,其定義域為det的矩陣A,取值為一個標量,寫作det(A)或 | A | 。無論是線上性代數、多項式理論,還是在微積分學中(比如說換元積分法中),行列式作為基本的數學工具,都有著重要的應用。

行列式可以看做是有向面積或體積的概念在一般的歐幾里得空間中的推廣。或者說,在 n 維歐幾里得空間中,行列式描述的是一個線性變換對"體積"所造成的影響。

4. 矩陣(matrix)5. 張量(tensor)二、一些運算1. 轉置(transpose)

轉置是以對角線為軸的矩陣的映象,從左上到右下稱為主對角線(main diagonal)。公式定義為:

向量可以看作只有一列的矩陣, 對應地,向量的轉置可以看作只有一行的矩陣。標量的轉置等於自身。

2. 矩陣運算

矩陣可以進行加法、乘法計算。

深度學習中,允許矩陣和向量相加:

3. 矩陣乘法

兩個矩陣的標準乘積不是兩個矩陣中對應元素的乘積。兩個矩陣 A A A 和 B B B 的矩陣乘積(matrix product)是第三個矩陣 C C C 。為了使乘法可被定義,矩陣 A A A的列數和矩陣 B B B的行數相等。如果矩陣 A A A的形狀是 m ∗ n m*n m∗n, 矩陣 B B B 的形狀是 m ∗ p m*p m∗p , 我們可以透過將兩個或多個矩陣並列放置以書寫矩陣乘法。例如:

具體地,該乘法操作定義為

示例:

元素對應乘積(Hadamard乘積)如果是元素對應乘積(element-wise product)或者Hadamard乘積,記為 : [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片儲存下來直接上傳(img-6oVQitIc-1607997146629)(https://wikimedia.org/api/rest_v1/media/math/render/svg/c341d3106d2763836b32f992b74e73f4cef0d24d)]

點積

矩陣乘法分配律

矩陣乘積結合律

矩陣乘積並不滿足交換律,然而兩個向量的點積滿足交換律:

矩陣乘積的轉置有著簡單的形式:

4. 單位矩陣(identity matrix)

從形式上看,單位矩陣所有沿對角線的元素都是1, 而其它位置的所有元素都是0.如:

5. 逆矩陣6. 求解 A x = b 三、使用Python Numpy進行一些矩陣定義1. 矩陣定義與矩陣形狀
import numpy as np# 建立一維的narray物件a = np.array([1,2,3,4,5])# 建立二維的narray物件a2 = np.array([[1,2,3,4,5],[6,7,8,9,10]])print(a)print(a2)# 列印a2的形狀print(a2.shape)# 行數print(a2.shape[0])# 列數print(a2.shape[1])

輸出結果:

2. 矩陣的擷取
import numpy as npa = np.array([[1,2,3,4,5],[6,7,8,9,10]])# 擷取第一行,返回 [[1 2 3 4 5]]print(a[0:1]) # 擷取第二行,第三到六列,返回 [8 9 10]print(a[1,2:5]) # 擷取第二行,返回 [ 6  7  8  9 10]print(a[1,:]) 
3. 按條件擷取
import numpy as npa = np.array([[1,2,3,4,5],[6,7,8,9,10]])# 擷取矩陣a中大於6的元素,範圍的是一維陣列 返回 [ 7  8  9 10]b = a[a>6] print(b) # 透過布林語句生成一個布林矩陣(其次將布林矩陣傳入[](方括號)實現上面擷取運算)print(a>6) 
4. 條件擷取後賦值
import numpy as npa = np.array([[1,2,3,4,5],[6,7,8,9,10]])print(a)a[a>6] = 0print(a)
5. 矩陣合併
import numpy as npa1 = np.array([[1,2],[3,4]])a2 = np.array([[5,6],[7,8]])#引數傳入時要以列表list或元組tuple的形式傳入# 橫向合併print(np.hstack([a1,a2]))  # 或 np.concatenate( (a1,a2), axis=1 )# 縱向合併print(np.vstack((a1,a2)))  # 或 np.concatenate( (a1,a2), axis=0 )
6. 透過函式建立矩陣arange 遞增矩陣
import numpy as npa = np.arange(10)    # 預設從0開始到10(不包括10),步長為1print(a)             # 返回 [0 1 2 3 4 5 6 7 8 9]a1 = np.arange(5,10) # 從5開始到10(不包括10),步長為1print(a1)            # 返回 [5 6 7 8 9]a2 = np.arange(5,20,2) # 從5開始到20(不包括20),步長為2print(a2)              # 返回 [ 5  7  9 11 13 15 17 19]
linspace 等差數列
import numpy as npa = np.linspace(0,10,7) # 生成首位是0,末位是10,含7個數的等差數列print(a) 
logspace 等比數列
import numpy as npa = np.logspace(0,2,5)  # 生成首位是10^0,末位是10^2,含5個數的等比數列print(a)
其它特殊矩陣ones 全1矩陣zeros 全0矩陣eye 單位矩陣empty 全空矩陣(未初始化值狀態,值不可預測)fromstring 從字串轉ndarray物件fromfunction 透過函式生成矩陣元素,可指定每個元素的生成演算法四、Python Numpy裡一些矩陣運算1. 基礎運算

運算子說明+矩陣對應元素相加-矩陣對應元素相減*矩陣對應元素相乘/矩陣對應元素相除,如果都是整數則取商%矩陣對應元素相除後取餘數**矩陣每個元素都取n次方,如**2:每個元素都取平方

示例:

import numpy as npa1 = np.array([[4,5,6],[1,2,3]])a2 = np.array([[6,5,4],[3,2,1]])print(a1+a2) # 相加print(a1/a2) # 整數相除取商print(a1%a2) # 相除取餘數
2. 一些運算函式np.sin(a) 每個元素取正弦np.cos(a) 每個元素取餘弦np.tan(a) 每個元素取正切np.arcsin(a) 每個元素取反正弦np.arccos(a) 每個元素取反餘弦np.arctan(a) 每個元素取反正切np.exp(a) 每個元素取指數函式, e x e^x exnp.sqrt(a) 每個元素開根號√x3. 矩陣乘法(點乘) dot
import numpy as npa1 = np.array([[1,2,3],[4,5,6]])   # a1為2*3矩陣a2 = np.array([[1,2],[3,4],[5,6]]) # a2為3*2矩陣print(a1.shape[1]==a2.shape[0]) # True, 滿足矩陣乘法條件,即第一個矩陣的列數等於第二個矩陣的行數print(a1.dot(a2)) print(a2.dot(a1)) 

可以看到點乘不滿足乘法交換率。

4. 矩陣轉置
import numpy as npa = np.array([[1,2,3],[4,5,6]])print(a.transpose())# 或 a.T
5. 逆矩陣
import numpy as npimport numpy.linalg as lga = np.array([[1,2,3],[4,5,6],[7,8,9]])print(lg.inv(a))a = np.eye(3)    # 定義一個3階單位矩陣print(lg.inv(a)) # 單位矩陣的逆為他本身
6. 統計函式最大值、最小值: a.max()平均值: a.mean()方差: a.var()標準差:a.std()中值: np.median(x)求和:a.sum()累積和: a.cumsum()

15
  • 「完整」2022年中級註冊安全工程師《化工安全實務》真題解析
  • 那至善的師道,誰真不讓你做了?