
Numpy庫? Numpy庫是Python的一種開源的數(shù)值計算擴展。 Numpy可用來存儲和處理大型矩陣,比Python自身的嵌套列表結(jié)構(gòu)要高效很多。 據(jù)說Numpy將Pyhon變成了一種免費的更強大的Matlab系統(tǒng)。Numpy庫包含了: 1. 強大的N維數(shù)組對象 2. 精密的函數(shù) 3. 連接C/C++和Fortran代碼的工具 4. 常用的線性代數(shù),傅里葉變換和隨機數(shù)生成
一、數(shù)組array?數(shù)組array和列表list類似,但是數(shù)據(jù)array可以定義維度,且適合做數(shù)學代數(shù)運算 a1 = np.array([1,2,3,4,4,5,6]) 這是一個一維數(shù)組: [1 2 3 4 4 5 6]這是一個二維數(shù)組: [[1 2 3] [4 5 6]]查看a1的長度: 7查看a2的長度: 2 '''數(shù)組元素整數(shù)轉(zhuǎn)化為浮點數(shù)''' 數(shù)組類型: int64改變數(shù)組類型后: float64 '''字符串數(shù)字轉(zhuǎn)化為浮點數(shù)''' a = np.array([[1,2,3],[4,5,6]]) [[1 2 3] [4 5 6]]第二行第三列元素(第二行索引為1,第三列索引為2): 6倒數(shù)第一行(注意索引為-1): [4 5 6]第三列(索引為2): [3 6]a形狀: (2, 3)a形狀重構(gòu): [[1 2] [3 4] [5 6]] [[1 2 3] [4 5 6]]維度解鎖: [1 2 3 4 5 6]按列求和: [5 7 9]按列求積: [ 4 10 18]全局最大值: 6 全局最小值: 1按行求最大值: [4 5 6] 按列求最小值: [1 4]按列求均值: [ 2.5 3.5 4.5]按行求標準差: [ 1.5 1.5 1.5] x = np.random.randint(1,20,(4,3)) 原矩陣: [[ 5 1 5] [16 13 6] [ 5 4 1] [18 14 12]]按列求和: [44 32 24]按行求均值: [ 3.66666667 11.66666667 3.33333333 14.66666667]按行累加: [[ 5 6 11] [16 29 35] [ 5 9 10] [18 32 44]] x = np.random.randint(1,5,(3,3)) 矩陣所有元素求指數(shù): [[ 54.59815003 54.59815003 20.08553692] [ 20.08553692 2.71828183 2.71828183] [ 7.3890561 7.3890561 2.71828183]]矩陣所有元素求根號: [[ 2. 2. 1.73205081] [ 1.73205081 1. 1. ] [ 1.41421356 1.41421356 1. ]] b = np.array([1.12312,2.12313,1.1100]) [ 1.12312 2.12313 1.11 ]小數(shù)位數(shù): [ 1.12 2.12 1.11] 原數(shù)組: [-0.44301833 -0.12900231 -0.42061772 0.28445053 0.46076555]向上取整: [-1. -1. -1. 0. 0.]向下取整: [-0. -0. -0. 1. 1.]四舍五入(控制小數(shù)為2位): [-0.44 -0.13 -0.42 0.28 0.46] 數(shù)組——一元函數(shù)?函數(shù) | 說明 |
---|
abs、fabs | 計算整數(shù)、浮點數(shù)或復(fù)數(shù)的絕對值。對于非復(fù)數(shù),使用fabs更快 | sqrt、square、exp | 計算各元素的平方根、平方、指數(shù)$e^x$ | log、log10、log2、log1p | 自然對數(shù)、底數(shù)10的對數(shù)、底數(shù)2的對數(shù)、$ln(1+x)$ | sign | 計算各元素的正負號:正1,零0,負-1 | ceil | 計算各元素的取整:大于等于該數(shù)的最小整數(shù) | floor | 計算各元素的取整:小于等于該數(shù)的最大整數(shù) | rint | 各元素四舍五入最接近的整數(shù),dtype不變 | modf | 將數(shù)組各元素的小數(shù)和整數(shù)部分以兩個獨立數(shù)組的形式返回 | isnan、isfinite、isinf | 判斷各元素是否為NaN、是否有窮、是否為無窮 | cos、cosh、sin、sinh、tan、tanh | 一般和雙曲型的三角函數(shù) | arccos、arccosh、arcsin、arcsinh、arctan、arctanh | 反三角函數(shù) | sum、mean | 數(shù)組全部或者按某個軸的方向進行求和、求均值 | std、var | 標準差、方差,自由度可以調(diào)整 | min、max、argmin、argmax | 最小和最大值、最小和最大元素的索引 | cumsum、cumprod | 數(shù)組全部或者按某個軸的方向進行累計和、累計積 |
a, b = np.array([1,2,3,4]), np.array([2,3,4,5]) [1 2 3 4][2 3 4 5]數(shù)組相加: [3 5 7 9]數(shù)組相乘: [ 2 6 12 20]數(shù)組乘方: [ 1 8 81 1024]數(shù)組判斷: [False True True True]向量內(nèi)積: 40 print('取兩個數(shù)組中的較大值組成新的數(shù)組:',np.maximum(a,b)) 取兩個數(shù)組中的較大值組成新的數(shù)組: [2 3 4 5]取兩個數(shù)組中的較小者組成新的數(shù)組: [1 2 3 4] x1 = np.array([True,False,True]) [ True False True][False False True][False False True][ True False True][ True False False] 數(shù)組——二元函數(shù)?函數(shù) | 說明 |
---|
add、multiply | 數(shù)組中對應(yīng)的元素相加、相乘 | substract | 第一個數(shù)組減去第二個數(shù)組中的元素 | divide、floor_divide | 除法、向下圓整除法(余數(shù)直接舍棄) | power | 對于第一個數(shù)組中的元素,根據(jù)第二個數(shù)組中的對應(yīng)元素,進行冪運算 | maximum、fmax | 元素級的最大值、fmax功能相同只是忽略NaN | minimum、fmin | 元素級的最小值、fmin功能相同只是忽略NaN | mod | 元素級的求余 | copysign | 將第二個數(shù)組中的值的符號復(fù)制給第一個數(shù)組中的值 | greater、greater_equal、less、less_equal、equal、not_equal | 元素級的比較運算,產(chǎn)生True或者False為元素的數(shù)組 | logical_and、logical_or、logical_xor | 元素級的邏輯判斷(且、或者、不等于) |
x = np.array([1,2,3,3,3,3,4,5,10,10,20,30]) 數(shù)組x中的唯一元素: [ 1 2 3 4 5 10 20 30]數(shù)組x和y的公共元素: [ 1 2 3 10 20]數(shù)組x和y的并集: [ 1 2 3 4 5 10 20 30 40 100]數(shù)組x中的元素是否包含于y: [ True True True True True True False False True True True False]集合差_在x中而不在y中的元素: [ 4 5 30]只存在某個數(shù)組中,而不同時存在于兩個數(shù)組中: [ 4 5 30 40 100] [0 1 2 3 4 5 6 7 8 9][0 2 4 6 8][1 3 5 7 9] a = np.array([[ 0, 1, 2, 3, 4, 5], 截取第1行第4,5個元素: [3 4]截取第5行至最后,第5列至最后的元素: [[44 45] [54 55]]截取第3,5行,第1,3,5列 [[20 22 24] [40 42 44]] # 對一個數(shù)組array,想找到其中大于0的數(shù)所在的索引位置 可以用where函數(shù) 大于0元素所在的索引: (array([2, 3, 5, 6]),) # 對于exp這個數(shù)組,希望對其按元素大小進行排序 從小到大排序: [ -100 -2 -1 2 2 33 10000] exp2 = np.array([[-23,29,1], 按行排序: [[-23 -10 1] [ -4 4 7] [ 2 29 12]]按列排序: [[-23 1 29] [ 2 4 12] [-10 -4 7]] exp3 = np.array([6,5,4,3,2,1]) 排序后元素所在的原索引位置 [5 4 3 2 1 0] a1 = np.array([6,5,4,3,2,1]) 縱向拼接: [[6 5 4 3 2 1] [1 2 3 4 5 6]]橫向拼接: [6 5 4 3 2 1 1 2 3 4 5 6] exp1 = np.array([[-23,29,1], 縱向拼接: [[-23 29 1] [ 2 4 12] [ -4 -10 7] [ 0 0 0] [ 0 0 0] [ 0 0 0]]橫向拼接: [[-23 29 1 0 0 0] [ 2 4 12 0 0 0] [ -4 -10 7 0 0 0]] 使用np.r_和np.c_也可以實現(xiàn)拼接的功能 注意縱向拼接的時候,np.c_產(chǎn)生的結(jié)果是$6*2$,而np.r_產(chǎn)生的結(jié)果是$2*6$ print('橫向拼接:\n',np.r_[a1,a2]) 橫向拼接: [6 5 4 3 2 1 1 2 3 4 5 6]縱向拼接: [[6 1] [5 2] [4 3] [3 4] [2 5] [1 6]] exp = np.array([[-23,29,1], 橫向分解為3個數(shù)組: [array([[-23], [ 2], [ -4]]), array([[ 29], [ 4], [-10]]), array([[ 1], [12], [ 7]])]縱向分解為3個數(shù)組: [array([[-23, 29, 1]]), array([[ 2, 4, 12]]), array([[ -4, -10, 7]])] 二、常用數(shù)組?在工作或者學習中,有些數(shù)組是我們常用的,利用numpy中的函數(shù)可以容易地產(chǎn)生這些數(shù)組 2.1 np.arange(起始數(shù),終止數(shù),間隔)?[1 2 3 4 5 6 7 8 9][ 1. 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2. 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 3. 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 4. 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 5. 5.1 5.2 5.3 5.4 5.5 5.6 5.7 5.8 5.9 6. 6.1 6.2 6.3 6.4 6.5 6.6 6.7 6.8 6.9 7. 7.1 7.2 7.3 7.4 7.5 7.6 7.7 7.8 7.9 8. 8.1 8.2 8.3 8.4 8.5 8.6 8.7 8.8 8.9 9. 9.1 9.2 9.3 9.4 9.5 9.6 9.7 9.8 9.9] 2.2 np.linspace(起始數(shù),終止數(shù),產(chǎn)生數(shù)的個數(shù))?[ 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.][-1. -0.89473684 -0.78947368 -0.68421053 -0.57894737 -0.47368421 -0.36842105 -0.26315789 -0.15789474 -0.05263158 0.05263158 0.15789474 0.26315789 0.36842105 0.47368421 0.57894737 0.68421053 0.78947368 0.89473684 1. ] print('元素都為1的方陣:\n',np.ones((3,3))) 元素都為1的方陣: [[ 1. 1. 1.] [ 1. 1. 1.] [ 1. 1. 1.]]元素都為0的方陣: [[ 0. 0. 0.] [ 0. 0. 0.] [ 0. 0. 0.]]單位陣: [[ 1. 0. 0.] [ 0. 1. 0.] [ 0. 0. 1.]] 2.4 np.tile()函數(shù)?該函數(shù)的作用是重復(fù)某個對象為一定的結(jié)構(gòu) [1 2 3][1 2 3 1 2 3 1 2 3] [[ 1. 0.] [ 0. 1.]][[ 1. 0. 1. 0.] [ 0. 1. 0. 1.] [ 1. 0. 1. 0.] [ 0. 1. 0. 1.]] 2.5 np.meshgrid()函數(shù)?np.meshgrid函數(shù)在畫三維圖時常用,其含義是利用兩個坐標軸的點形成一個平面 [-3 -2 -1 0 1 2 3][-2 -1 0 1 2] X #X是根據(jù)x按行產(chǎn)生 y的長度個的行 Y #Y是根據(jù)y按列產(chǎn)生 x的長度個的列 自然底數(shù): 2.718281828459045缺失值: nan無窮大: inf圓周率: 3.141592653589793 print('一維正態(tài)隨機數(shù):\n',np.random.randn(5)) 一維正態(tài)隨機數(shù): [-1.54889386 1.71266157 -1.21664674 0.11417545 0.60703329]二維正態(tài)隨機數(shù): [[ 0.16870831 0.72375413] [-0.28110209 0.71372129]]二維0-1均勻分布隨機數(shù): [[ 0.82010506 0.0401018 ] [ 0.92058936 0.4421662 ]]5個10-20的均勻隨機整數(shù): [19 17 19 13 11]二維均勻隨機整數(shù): [[42 23] [13 18]] numpy.random函數(shù)?函數(shù) | 說明 |
---|
seed | 隨機數(shù)生成器的種子 | permutation | 序列的隨機排列或者隨機排列的范圍,不改變原數(shù)組 | shuffle | 序列就地隨機排列,改變原數(shù)組 | rand | 均勻分布樣本值 | randint | 給定上下限隨機產(chǎn)生整數(shù) | randn | 正態(tài)分布樣本值 | binomial | 二項分布樣本值 | normal | 正態(tài)分布樣本值 | beta | beta分布樣本值 | chisquare | 卡方分布樣本值 | gamma | Gamma分布樣本值 | uniform | [0,1)均勻分布樣本值 | choice | 從數(shù)組中隨機選擇若干個元素 |
[ 1 2 3 4 5 6 7 8 9 10]隨機打亂a中的元素順序: [ 3 6 10 2 8 4 7 1 9 5] [ 4 2 5 7 10 9 1 8 3 6]隨機從a中選取5個元素: [3 9 2 6 3] x = np.random.randint(1,10,(3,3)) 原矩陣: [[6 7 8] [6 3 2] [1 6 7]]矩陣對角線: [6 3 7]矩陣上三角: [[6 7 8] [0 3 2] [0 0 7]]矩陣下三角: [[6 0 0] [6 3 0] [1 6 7]]矩陣的跡: 16矩陣的轉(zhuǎn)置: [[6 6 1] [7 3 6] [8 2 7]] x = np.random.randint(1,10,(3,3)) 原矩陣: [[9 1 3] [4 3 4] [1 2 1]]矩陣元素向右循環(huán)移動2位: [[2 1 9] [1 3 4] [3 4 1]] import numpy.linalg as la x = np.random.randint(1,10,(3,3)) 原矩陣: [[8 3 9] [2 4 9] [7 5 5]]矩陣的行列式: -203.0矩陣的逆: [[ 0.12315271 -0.14778325 0.04433498] [-0.26108374 0.11330049 0.26600985] [ 0.08866995 0.09359606 -0.12807882]]矩陣的特征值分解: (array([ 17.59463536, 3.11237519, -3.70701055]), array([[-0.67692023, -0.58963061, -0.32958687], [-0.47296268, 0.80602725, -0.67968899], [-0.56399052, 0.0515346 , 0.65528266]]))矩陣的奇異值分解: (array([[-0.67891 , 0.19378171, -0.70818773], [-0.51305088, -0.81519105, 0.26877938], [-0.52522377, 0.54581334, 0.65286123]]), array([ 18.05856915, 4.71111404, 2.38610244]), array([[-0.56117116, -0.37184853, -0.73946981], [ 0.79398735, 0.01053841, -0.60784293], [-0.23381833, 0.9282336 , -0.28932918]])) x = np.random.randint(1,10,(3,3)) 求解 Xβ=y 線性方程組解β為: [[-0.73684211] [ 0.31578947] [ 3.36842105]] numpy.linalg函數(shù)?函數(shù) | 說明 |
---|
diag | 以一維數(shù)組的形式返回方陣的對角線元素或?qū)⒁痪S數(shù)組轉(zhuǎn)化為方陣 | dot、trace、det | 矩陣乘法、矩陣的跡運算、矩陣行列式 | eig、inv、pinv | 方陣的特征值和特征向量、方陣的逆、矩陣的Moore-Penrose偽逆 | qr、svd | 矩陣的QR分解、奇異值分解 | solve | 解線性方程組$X\beta=y$,其中$X$為方陣 | lstsq | 計算$X\beta=y$的最小二乘解 |
import matplotlib.pyplot as plt # 導(dǎo)入作圖庫 為了更好展示曲線擬合的結(jié)果 例如,對于下面的這些散點進行多項式擬合。觀察散點的形態(tài),采用直線取擬合 x = np.linspace(-10,10,100) from numpy import polyfit,poly1d coef_fit = polyfit(x, y, 1) #進行線性擬合 1代表的是多項式擬合的多項式的階數(shù) 這里指的是線性擬合 plt.plot(x, y, 'rx',label='真實散點') 從上圖可以看到,直線擬合的結(jié)果還是比較好的 f = poly1d(coef_fit) #也可以直接產(chǎn)生擬合的函數(shù)解析式 擬合函數(shù): 2.016 x + 1.283
|