python科学计算三剑客_1-python数据分析-数据分析介绍、数据分析三剑客之NumPy
數(shù)據(jù)分析三劍客
numpy
pandas(重點(diǎn))
matplotlib
numpy模塊
NumPy(Numerical Python) 是 Python 語言中做科學(xué)計(jì)算的基礎(chǔ)庫。側(cè)重在于數(shù)值計(jì)算,也是大部分Python科學(xué)計(jì)算庫的基礎(chǔ),多用于在大型、多維數(shù)組上執(zhí)行的數(shù)值運(yùn)算。
重點(diǎn)
numpy數(shù)組的創(chuàng)建
numpy索引和切片
級聯(lián)
變形
矩陣的乘法和轉(zhuǎn)置
常見的聚合函數(shù)+統(tǒng)計(jì)
numpy的創(chuàng)建
使用np.array()創(chuàng)建
使用plt創(chuàng)建
使用np的routines函數(shù)創(chuàng)建
使用np.array()創(chuàng)建
#用array()創(chuàng)建一個(gè)一維數(shù)組
importnumpy as np
np.array([1,2,3,4,5]) #array([1, 2, 3, 4, 5])
#使用array()創(chuàng)建一個(gè)多維數(shù)組
np.array([[1,2,3],[4,5,6]])
array([[1, 2, 3],
[4, 5, 6]])
數(shù)組和列表的區(qū)別是什么?
數(shù)組中存儲的數(shù)據(jù)元素類型必須是統(tǒng)一類型
優(yōu)先級:
字符串 > 浮點(diǎn)型 > 整數(shù)
np.array([1.1,'哈哈',11]) #array(['1.1', '哈哈', '11'], dtype='
np.array([1,5,6.1,8]) #array([1. , 5. , 6.1, 8. ])
將外部的一張圖片讀取加載到numpy數(shù)組中,然后嘗試改變數(shù)組元素的數(shù)值查看對原始圖片的影響
importmatplotlib.pyplot as plt#imread可以返回一個(gè)numpy數(shù)組
img_arr = plt.imread('./1.jpg')#將返回的數(shù)組的數(shù)據(jù)進(jìn)行圖像的展示
plt.imshow(img_arr) #imshow也可以將一個(gè)二維數(shù)組進(jìn)行圖片展示規(guī)
plt.imshow(img_arr + 100)
zeros()、ones()、linespace()、arange()、random系列
#ones zeros()與ones()相似
np.ones(shape=(3,4)) #返回一個(gè)3行4列的np數(shù)組,元素都是1., zeros是0.
array([[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]])#linspace返回一維形式的等差數(shù)列 開始 ,結(jié)束,一共8個(gè)元素
np.linspace(0, 50, num=8)
array([ 0. ,7.14285714, 14.28571429, 21.42857143, 28.57142857,35.71428571, 42.85714286, 50. ])#arange返回一維形式的等差數(shù)列
np.arange(0,50,5)
array([ 0,5, 10, 15, 20, 25, 30, 35, 40, 45])#random.randint 返回指定形狀的隨機(jī)整數(shù)數(shù)組
np.random.randint(0,20,size=(4,5))
array([[3, 1, 16, 14, 1],
[18, 13, 10, 14, 18],
[19, 19, 1, 8, 13],
[15, 2, 17, 15, 6]])#random.random 隨機(jī)范圍0-1
np.random.random(size=(2, 2))
array([[0.16654448, 0.59399791],
[0.6076535 , 0.89254046]])
numpy的常用屬性
shape 形狀
ndim 維度
size 元素總個(gè)數(shù)
dtype 元素的數(shù)據(jù)類型
img_arr.shape #返回?cái)?shù)組形狀
(500, 500, 3)
img_arr.ndim#返回?cái)?shù)組維度
3img_arr.size#返回?cái)?shù)組元素總個(gè)數(shù)
750000img_arr.dtype#返回?cái)?shù)組元素的數(shù)據(jù)類型
dtype('uint8')
type(img_arr)#返回?cái)?shù)組的數(shù)據(jù)類型
numpy.ndarray
numpy的數(shù)據(jù)類型
array(dtype=?):可以設(shè)定數(shù)據(jù)類型
arr.dtype = '?':可以修改數(shù)據(jù)類型
arr.astype('?'):也可以修改數(shù)據(jù)類型
修改數(shù)據(jù)類型
arr = np.array([1,2,3], dtype='float16')
array([1., 2., 3.], dtype=float16)#1、修改arr元素的數(shù)據(jù)類型
arr.astype('int8')
array([1, 2, 3], dtype=int8)#2、修改arr元素的數(shù)據(jù)類型
arr.dtype='float16'array([1., 2., 3.], dtype=float16)
numpy的索引和切片操作(重點(diǎn))
索引取值操作
索引取值操作和列表同理
arr = np.random.randint(0,100,size=(5,6))
array([[21, 36, 62, 40, 52, 54],
[91, 45, 40, 35, 17, 98],
[48, 49, 36, 59, 47, 36],
[80, 66, 77, 21, 1, 80],
[18, 32, 55, 0, 32, 12]])
arr[3][4]1arr[0,4]52
切片操作
切出前兩行數(shù)據(jù)
切出前兩列數(shù)據(jù)
切出前兩行的前兩列的數(shù)據(jù)
數(shù)組數(shù)據(jù)翻轉(zhuǎn)
練習(xí):將一張圖片上下左右進(jìn)行翻轉(zhuǎn)操作
練習(xí):將圖片進(jìn)行指定區(qū)域的裁剪
#切出數(shù)組的前兩行的數(shù)據(jù)
arr[0:2]
array([[21, 36, 62, 40, 52, 54],
[91, 45, 40, 35, 17, 98]])#切出數(shù)組的前兩列
arr[:,0:2]
array([[21, 36],
[91, 45],
[48, 49],
[80, 66],
[18, 32]])#切出數(shù)組前兩行的前兩列
arr[0:2, 0:2]
array([[21, 36],
[91, 45]])#將數(shù)組行倒置
arr[::-1]
array([[18, 32, 55, 0, 32, 12],
[80, 66, 77, 21, 1, 80],
[48, 49, 36, 59, 47, 36],
[91, 45, 40, 35, 17, 98],
[21, 36, 62, 40, 52, 54]])#將數(shù)組列倒置
arr[::,::-1]
array([[54, 52, 40, 62, 36, 21],
[98, 17, 35, 40, 45, 91],
[36, 47, 59, 36, 49, 48],
[80, 1, 21, 77, 66, 80],
[12, 32, 0, 55, 32, 18]])#將數(shù)組進(jìn)行行列導(dǎo)倒置
arr[::-1,::-1]
array([[12, 32, 0, 55, 32, 18],
[80, 1, 21, 77, 66, 80],
[36, 47, 59, 36, 49, 48],
[98, 17, 35, 40, 45, 91],
[54, 52, 40, 62, 36, 21]])
將圖片進(jìn)行翻轉(zhuǎn)
importmatplotlib.pyplot as plt
img_arr= plt.imread('./1.jpg')
plt.imshow(img_arr)
img_arr.shape
(500, 500, 3) #前倆個(gè)是圖片像素,最后一個(gè)是顏色維度
#將圖片左右翻轉(zhuǎn)
plt.imshow(img_arr[:,::-1,:])#將圖片上下翻轉(zhuǎn)
plt.imshow(img_arr[::-1])#上下左右顏色都倒置
plt.imshow(img_arr[::-1,::-1,::-1])#圖片的裁剪:將臉部數(shù)據(jù)裁剪下來
plt.imshow(img_arr[30:300,140:330,:])
變形 reshape
注意:變形前和變形后數(shù)組的容量不可以發(fā)生變化
arr.shape
(5, 6)#將二維數(shù)組變形成一維數(shù)組 reshape()
arr_1 = arr.reshape((30,)) #原數(shù)組一共有30個(gè)元素,所以這里必須是30
array([21, 36, 62, 40, 52, 54, 91, 45, 40, 35, 17, 98, 48, 49, 36, 59, 47,36, 80, 66, 77, 21, 1, 80, 18, 32, 55, 0, 32, 12])#將一維數(shù)組變多維
arr_1 = arr.reshape((3,10)) #給定一個(gè)值另一個(gè)可以用-1自動計(jì)算
array([[21, 36, 62, 40, 52, 54, 91, 45, 40, 35],
[17, 98, 48, 49, 36, 59, 47, 36, 80, 66],
[77, 21, 1, 80, 18, 32, 55, 0, 32, 12]])
arr_1= arr.reshape((-1,10))
arr_1= arr.reshape((3,-1))
array([[21, 36, 62, 40, 52, 54, 91, 45, 40, 35],
[17, 98, 48, 49, 36, 59, 47, 36, 80, 66],
[77, 21, 1, 80, 18, 32, 55, 0, 32, 12]])
級聯(lián)操作 concatenate
級聯(lián)的操作意義:將多個(gè)numpy數(shù)組進(jìn)行橫向或者縱向拼接
axis軸向的理解
0:列 y軸方向,豎直方向
1:行 x軸方向,水平方向
問題:
級聯(lián)的兩個(gè)數(shù)組維度一樣,但是行列個(gè)數(shù)不一樣會如何?
#axis=0列和列進(jìn)行拼接,axis=1行和行進(jìn)行拼接
np.concatenate((arr,arr),axis=1)
array([[21, 36, 62, 40, 52, 54, 21, 36, 62, 40, 52, 54],
[91, 45, 40, 35, 17, 98, 91, 45, 40, 35, 17, 98],
[48, 49, 36, 59, 47, 36, 48, 49, 36, 59, 47, 36],
[80, 66, 77, 21, 1, 80, 80, 66, 77, 21, 1, 80],
[18, 32, 55, 0, 32, 12, 18, 32, 55, 0, 32, 12]])
np.concatenate((arr,arr),axis=0)
array([[21, 36, 62, 40, 52, 54],
[91, 45, 40, 35, 17, 98],
[48, 49, 36, 59, 47, 36],
[80, 66, 77, 21, 1, 80],
[18, 32, 55, 0, 32, 12],
[21, 36, 62, 40, 52, 54],
[91, 45, 40, 35, 17, 98],
[48, 49, 36, 59, 47, 36],
[80, 66, 77, 21, 1, 80],
[18, 32, 55, 0, 32, 12]])
級聯(lián)的兩個(gè)數(shù)組維度一樣,但是行列個(gè)數(shù)不一樣會如何?
如果橫向級聯(lián)保證行數(shù)一致,縱向級聯(lián)保證列數(shù)一致
注意:維度不一致的數(shù)組無法級聯(lián)
arr_new = np.random.randint(0,100,size=(5,5))
array([[29, 43, 36, 67, 32],
[63, 65, 31, 90, 55],
[13, 59, 3, 3, 22],
[55, 26, 10, 5, 80],
[27, 20, 61, 75, 23]])
arr
array([[21, 36, 62, 40, 52, 54],
[91, 45, 40, 35, 17, 98],
[48, 49, 36, 59, 47, 36],
[80, 66, 77, 21, 1, 80],
[18, 32, 55, 0, 32, 12]])
np.concatenate((arr,arr_new), axis=0) #這樣就會報(bào)錯(cuò)他倆列數(shù)不同
np.concatenate((arr,arr_new), axis=1) #先寫的數(shù)組元素在前
array([[21, 36, 62, 40, 52, 54, 29, 43, 36, 67, 32],
[91, 45, 40, 35, 17, 98, 63, 65, 31, 90, 55],
[48, 49, 36, 59, 47, 36, 13, 59, 3, 3, 22],
[80, 66, 77, 21, 1, 80, 55, 26, 10, 5, 80],
[18, 32, 55, 0, 32, 12, 27, 20, 61, 75, 23]])
圖片的9宮格
img_arr3 = np.concatenate((img_arr,img_arr,img_arr),axis=1)
img_arr9= np.concatenate((img_arr3,img_arr3,img_arr3), axis=0)
plt.imshow(img_arr9)
常用的聚合操作
sum求和、max最大值、min最小值、mean均值
#sum求和、max最大值、min最小值、mean均值,它們4個(gè)用法一致
arr.sum()#計(jì)算所有元素的和
1340arr.sum(axis=0) #計(jì)算每列元素的和
array([258, 228, 270, 155, 149, 280])
arr.sum(axis=1) #計(jì)算每行元素的和
array([265, 326, 275, 325, 149])
常用的數(shù)學(xué)函數(shù)
NumPy 提供了標(biāo)準(zhǔn)的三角函數(shù)及反三角函數(shù):sin()、cos()、tan()
numpy.around(a,decimals) 函數(shù)返回指定數(shù)字的四舍五入值。
參數(shù)說明:
a: 數(shù)組
decimals: 舍入的小數(shù)位數(shù)。 默認(rèn)值為0。 如果為負(fù),整數(shù)將四舍五入到小數(shù)點(diǎn)左側(cè)的位置
np.sin([3.5,4.6,2.1])
array([-0.35078323, -0.993691 , 0.86320937])
np.around([33.4,51.2,55.8]) #默認(rèn)decimals為0
array([33., 51., 56.])
np.around([33.4,51.2,55.8], decimals=1) #decimals=1保留一位小數(shù)
array([33.4, 51.2, 55.8])
np.around([33.4,51.2,55.8], decimals=-1) #decimals=-1個(gè)位數(shù)上四舍五入
array([30., 50., 60.])
常用的統(tǒng)計(jì)函數(shù)
numpy.amin() 和numpy.amax(),用于計(jì)算數(shù)組中的元素沿指定軸的最小、最大值。
numpy.ptp():計(jì)算數(shù)組中元素最大值與最小值的差(最大值 - 最小值)極差。
numpy.median() 函數(shù)用于計(jì)算數(shù)組 a 中元素的中位數(shù)(中值)
標(biāo)準(zhǔn)差std():標(biāo)準(zhǔn)差是一組數(shù)據(jù)平均值分散程度的一種度量。所有數(shù)據(jù)與均值的差的平方和除以元素個(gè)數(shù)開根號
公式:std = sqrt(mean((x - x.mean())**2))
如果數(shù)組是 [1,2,3,4],則其平均值為 2.5。 因此,差的平方是 [2.25,0.25,0.25,2.25],并且其平均值的平方根除以 4,即 sqrt(5/4) ,結(jié)果為 1.1180339887498949。
方差var():統(tǒng)計(jì)中的方差(樣本方差)是每個(gè)樣本值與全體樣本值的平均數(shù)之差的平方值的平均數(shù),即 mean((x - x.mean())** 2)。換句話說,標(biāo)準(zhǔn)差是方差的平方根。
總結(jié)
以上是生活随笔為你收集整理的python科学计算三剑客_1-python数据分析-数据分析介绍、数据分析三剑客之NumPy的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 理财不保本是什么意思?理财不保本有风险吗
- 下一篇: python与网页设计的区别_Pytho