一、函數庫
- 線性代數使用LAPACK庫
- 快速傅立葉變換使用FFTPACK庫
- 常微分方程求解使用ODEPACK庫
- 非線性方程組求解以及最小值求解等使用MINPACK庫
二、Numpy
1、創建數組
import numpy as np a = np.array([1, 2, 3, 4]) b = np.array([[1, 2, 3, 4], [4, 5, 6, 7], [7, 8, 9, 10]])
結果:
很顯然,這種方法效率並不高,所以Numpy提供了很多專門用來創建數組的函數,例如:
- arange()類似於內置函數range(),通過設置開始值、終值和步長創建表示等差數列的一維數組,但是得到的結果並不包含終值,示例如下:
c = np.arange(1, 10, 1) # 結果:[1 2 3 4 5 6 7 8 9]
- lispance()通過指定開始值、終值和元素個數創建表示等差數列的一維數組,可以通過endpoint參數指定是否包含終值,默認為True,即包含終值。示例如下:
-
d = np.linspace(1, 10, 10) # 結果:[ 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.] e = np.linspace(1, 10, 10, endpoint=False) # 結果:[ 1. 1.9 2.8 3.7 4.6 5.5 6.4 7.3 8.2 9.1]
logspace()和linspace()類似,不過它創建的數組是等比數列。開始值0表示10^2,終值2表示10^2,步長5表示有5個數值,基數可以通過base參數設置,默認值為10, 創建一個2^1/5的等比數組。 示例如下:
-
f = np.logspace(0, 2, 5) # 結果:[ 1. 3.16227766 10. 31.6227766 100. ]
g = np.logspace(0, 2, 5, base=2, endpoint=False) # 結果:[ 1. 1.31950791 1.74110113 2.29739671 3.03143313]
zeros()、ones()、empty()可以創建指定形狀和類型的數組。其中:empty()僅僅分配數組所使用的內存,不對數組元素進行初始化操作,因此它的運行速度是最快的。 zeros()將數組元素初始化為0。
h = np.empty((2, 3), np.int) # 結果:[[ 1 0 506081024][ 0 0 0]] 只分配內存,不對其進行初始化
i = np.zeros(4, np.float) # 結果:[ 0. 0. 0. 0.]
2、存取元素
- 一維數組可以使用和列表相同的方式對數組的元素進行存取
b = a[5] # 用整數作為下標可以獲取數組中的某個元素 c = a[3:5] # 用切片作為下標可以獲取數組的一部分,包括a[3]但不包括a[5] d = a[:5] # 切片中省略開始下標,表示從a[0]開始 e = a[:-1] # 下標可以使用負數,表示從數組最后往前數 a[2:4] = 101, 102 # 下標可以用來修改元素的值 f = a[1:-1:2] # 切片中的第三個參數表示步長 g = a[::-1] # 省略切片開始的下標和結束的下標,步長為-1,表示整個數組頭尾顛倒 h = a[5:1:-2] # 步長為負數時,開始下標必須大於結束下標
- 多維數組的創建與存取
b = np.arange(0, 60, 10).reshape(-1, 1) + np.arange(0, 6)
結果為:
[[ 0 1 2 3 4 5] [10 11 12 13 14 15] [20 21 22 23 24 25] [30 31 32 33 34 35] [40 41 42 43 44 45] [50 51 52 53 54 55]]
c = b[0, 3:5] # 取第0行第3列和第4列的數
d = b[4:, 4:] # 取第4行到最后一行的第4列到最后一列的數
e = b[:, 2] # 取所有行的第2列的數
f = b[2::2, ::2] # 取第2行到最后一行,第一列到最后一列的步長為2的數
g = b[(0, 1, 2, 3), (1, 2, 3, 4)] # 取第0行的第1個數,第1行的第2個數,第2行的第3個數,第3行的第4個數
h = b[3:, [0, 2, 5]] # 取第3行之后的所有列中的第0列,第2列,第5列的數
mask = np.array([1, 0, 1, 0, 0, 1], dtype=np.bool) # bool類型的1代表取這行,0代表不取這行 i = b[mask, 2] # 取第0行,第2行,第5行的第2列的數
mask = np.array([1, 0, 1, 0, 0, 1]) j = b[mask, 2] # 取第1行,第0行,第1行,第0行,第0行,第1行的第二列的數
mask = [True, False, True, False, False, True] k =b[mask, 2] # 取第1行,第0行,第1行,第0行,第0行,第1行的第二列的數
l = b[[1, 2]] # 與a[[1,2], :]相同,取第1行和第2行的所有數據
3、龐大的函數庫
求和
sum()計算數組元素之和,也可以對列表、元組等和數組類似的序列進行求和。當數組為多維時,它計算數組中所有元素的和。
a = [[1,2,3,4],[5,6,7,8],[3,4,2,7],[3,6,2,9]]
np.sum(a)
平均值
mean用於求數組的平均值
a = [[1,2,3,4],[5,6,7,8],[3,4,2,7],[3,6,2,9]]
np.mean(a)
方差
var()用於求數組的方差
a = [[1,2,3,4],[5,6,7,8],[3,4,2,7],[3,6,2,9]]
np.var(a)
標准差
std()用於求數組的標准差
a = [[1,2,3,4],[5,6,7,8],[3,4,2,7],[3,6,2,9]]
np.std(a)
最值
用min()和max()計算數組的最小值和最大值,ptp()計算最大值和最小值之間的差,argmin()和argmax()計算最小值和最大值的下標
a = [[1,2,3,4],[5,6,7,8],[3,4,2,7],[3,6,2,9]]
np.min(a)
np.max(a)
np.ptp(a)
np.argmin(a)
np.argmax(a)
排序
數組的sort()方法用於對數組進行排序
a = [[1,2,3,4],[5,6,7,8],[3,4,2,7],[3,6,2,9]]
np.sort(a)
中值
用median()可以獲得數組的中值
a = [[1,2,3,4],[5,6,7,8],[3,4,2,7],[3,6,2,9]]
np.median(a)
三、scipy統計-stats