日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

3

 LQuan 2018-02-12

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ù)生成
?x
import numpy as np

一、數(shù)組array?

數(shù)組array和列表list類似,但是數(shù)據(jù)array可以定義維度,且適合做數(shù)學代數(shù)運算

1.1 數(shù)組array生成?

1
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
1
a2
1
a2[0,1]

1.2 數(shù)組array性質(zhì)?

1
'''數(shù)組元素整數(shù)轉(zhuǎn)化為浮點數(shù)'''
數(shù)組類型: int64改變數(shù)組類型后: float64
1
'''字符串數(shù)字轉(zhuǎn)化為浮點數(shù)'''
['1.11' '2.22' '3.33']
1
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
print(a)
[[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]
1
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]]
1
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. ]]

小數(shù)位數(shù)控制和取整

1
b = np.array([1.12312,2.12313,1.1100])
[ 1.12312 2.12313 1.11 ]小數(shù)位數(shù): [ 1.12 2.12 1.11]
1
x = np.random.randn(5)
原數(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ù)組全部或者按某個軸的方向進行累計和、累計積

1.3 數(shù)組array間運算?

1
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
1
print('取兩個數(shù)組中的較大值組成新的數(shù)組:',np.maximum(a,b))
取兩個數(shù)組中的較大值組成新的數(shù)組: [2 3 4 5]取兩個數(shù)組中的較小者組成新的數(shù)組: [1 2 3 4]
1
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元素級的邏輯判斷(且、或者、不等于)

1.4 數(shù)組array集合運算?

1
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]

1.5 數(shù)組array切片進階?

1
a = np.array(range(10))
[0 1 2 3 4 5 6 7 8 9][0 2 4 6 8][1 3 5 7 9]
1
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]]

1.6 數(shù)組排序?

1
# 對一個數(shù)組array,想找到其中大于0的數(shù)所在的索引位置 可以用where函數(shù)
大于0元素所在的索引: (array([2, 3, 5, 6]),)
1
# 對于exp這個數(shù)組,希望對其按元素大小進行排序
從小到大排序: [ -100 -2 -1 2 2 33 10000]
1
exp2 = np.array([[-23,29,1],
按行排序: [[-23 -10 1] [ -4 4 7] [ 2 29 12]]按列排序: [[-23 1 29] [ 2 4 12] [-10 -4 7]]
1
exp3 = np.array([6,5,4,3,2,1])
排序后元素所在的原索引位置 [5 4 3 2 1 0]

1.7 數(shù)組拼接?

1
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]
1
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$

1
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]]

1.8 數(shù)組分解?

1
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
print(np.arange(1,10,1))
[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
#在指定區(qū)間返回均勻間隔的數(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. ]

2.3 常用矩陣?

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
short = np.arange(1,4,1)
[1 2 3][1 2 3 1 2 3 1 2 3]
1
small = np.eye(2)
[[ 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ù)在畫三維圖時常用,其含義是利用兩個坐標軸的點形成一個平面

1
x = np.arange(-3,4,1)
[-3 -2 -1 0 1 2 3][-2 -1 0 1 2]
1
[X,Y] = np.meshgrid(x,y)
1
X #X是根據(jù)x按行產(chǎn)生 y的長度個的行
1
Y #Y是根據(jù)y按列產(chǎn)生 x的長度個的列

三、numpy常用常量?

1
print('自然底數(shù):',np.e)
自然底數(shù): 2.718281828459045缺失值: nan無窮大: inf圓周率: 3.141592653589793

四、numpy隨機數(shù)產(chǎn)生?

1
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)分布樣本值
betabeta分布樣本值
chisquare卡方分布樣本值
gammaGamma分布樣本值
uniform[0,1)均勻分布樣本值
choice從數(shù)組中隨機選擇若干個元素
1
a = np.arange(1,11,1)
[ 1 2 3 4 5 6 7 8 9 10]隨機打亂a中的元素順序: [ 3 6 10 2 8 4 7 1 9 5]
1
print(a)
[ 4 2 5 7 10 9 1 8 3 6]隨機從a中選取5個元素: [3 9 2 6 3]

五、numpy矩陣性質(zhì)?

1
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]]
1
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]]

六、numpy矩陣運算?

1
import numpy.linalg as la
1
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]]))
1
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$的最小二乘解

七、多項式曲線擬合?

1
import matplotlib.pyplot as plt # 導(dǎo)入作圖庫 為了更好展示曲線擬合的結(jié)果

例如,對于下面的這些散點進行多項式擬合。觀察散點的形態(tài),采用直線取擬合

1
x = np.linspace(-10,10,100)
1
from numpy import polyfit,poly1d
1
coef_fit = polyfit(x, y, 1) #進行線性擬合 1代表的是多項式擬合的多項式的階數(shù) 這里指的是線性擬合
1
plt.plot(x, y, 'rx',label='真實散點')

從上圖可以看到,直線擬合的結(jié)果還是比較好的

1
f = poly1d(coef_fit) #也可以直接產(chǎn)生擬合的函數(shù)解析式
擬合函數(shù): 2.016 x + 1.283

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多