章節
默認情況下,所有NumPy函數都可以在SciPy(命名空間)中使用。當導入SciPy時,不需要顯式地導入NumPy函數。NumPy的主要對象是n次多維數組ndarray,SciPy構建在ndarray數組之上,ndarray是存儲單一數據類型的多維數組。在NumPy中,維度稱為軸,坐標軸的數量稱為秩。
通常線性代數主要處理矩陣運算,現在,讓我們復習一下NumPy中向量/數組和矩陣的基本功能。
NumPy ndarray數組
ndarray是NumPy中最重要的類。
標准的Python列表(list)中,元素是對象。如:L = [1, 2, 3],需要3個指針和三個整數對象,對於數值運算比較浪費資源。
與此不同,ndarray中元素直接存儲為原始數據,元素的類型由ndarray對象中的屬性dtype描述。
當ndarray數組中的元素,通過索引或切片返回時,會根據dtype,從原始數據轉換成Python對象,以便外部使用。
示例
將Python類數組對象轉換為NumPy數組
import numpy as np
list = [1,2,3,4]
arr = np.array(list)
print (arr)
print (type(arr))
輸出
[1 2 3 4]
<class 'numpy.ndarray'>
創建NumPy數組
NumPy中,可以使用下面介紹的內置函數創建ndarrray數組。
zeros()
zeros()
函數創建數組,並且把數組元素的值初始化為0,可以指定數組形狀和數據類型。
示例
import numpy as np
print (np.zeros((2, 3)))
輸出
[[0. 0. 0.]
[0. 0. 0.]]
ones()
ones()
函數創建數組,並且把數組元素的值初始化為1,可以指定數組形狀和數據類型。
示例
import numpy as np
print (np.ones((2, 3)))
輸出
[[1. 1. 1.]
[1. 1. 1.]]
arange()
arange()
函數創建遞增數組。
示例
import numpy as np
print (np.arange(7))
輸出
[0 1 2 3 4 5 6]
數組的數據類型
數據類型對象dtype,是描述數組中元素數據類型的對象。
示例
import numpy as np
arr = np.arange(2, 10, dtype = np.float)
print (arr)
print ("數組數據類型 :", arr.dtype)
輸出
[ 2. 3. 4. 5. 6. 7. 8. 9.]
數組數據類型 : float64
linspace()
linspace()
函數創建一個數組,該數組包含指定區間內均勻分布的值。
示例
import numpy as np
print (np.linspace(1., 4., 6))
輸出
[1. 1.6 2.2 2.8 3.4 4. ]
矩陣
矩陣是一種特殊的二維數組,它有一些特殊的運算符,如*(矩陣乘法)和**(矩陣冪)。
示例
import numpy as np
print (np.matrix('1 2; 3 4'))
輸出
[[1 2]
[3 4]]
矩陣轉置
將矩陣的行列互換得到的新矩陣,稱為轉置矩陣。
示例
import numpy as np
mat = np.matrix('1 2; 3 4')
mat.T
輸出
matrix([[1, 3],
[2, 4]])
矩陣的共軛轉置
共軛就是矩陣每個元素都取共軛(復數的實部不變,虛部取負)。
共軛轉置就是先取共軛,再取轉置。
示例
import numpy as np
mat = np.matrix('1 2; 3 4')
print (mat.H)
輸出
matrix([[1, 3],
[2, 4]])
單位矩陣
單位矩陣在矩陣的乘法中,起着特殊的作用,如同數的乘法中的1。單位矩陣是個方陣,從左上角到右下角的對角線(稱為主對角線)上的元素均為1,除此以外全都為0。
示例
創建單位矩陣:
import numpy.matlib
import numpy as np
print (np.matlib.identity(5))
輸出
[[1. 0. 0. 0. 0.]
[0. 1. 0. 0. 0.]
[0. 0. 1. 0. 0.]
[0. 0. 0. 1. 0.]
[0. 0. 0. 0. 1.]]
逆矩陣
逆矩陣的數學定義:存在矩陣M以及矩陣N,假如M*N = 矩陣I(Identify Matrix單位矩陣),那么矩陣M和矩陣N互為逆矩陣。
示例
求一個矩陣的逆矩陣:
import numpy as np
mat = np.matrix('1 2; 3 4')
mat2 = mat.I
print(mat2)
輸出
[[-2. 1. ]
[ 1.5 -0.5]]