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