Python NumPy的使用
生活随笔
收集整理的這篇文章主要介紹了
Python NumPy的使用
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
NumPy
- 學(xué)習(xí)目標(biāo):
- NumPy的使用
- 學(xué)習(xí)內(nèi)容:
- 使用步驟
- Numpy 數(shù)組操作
- 1、 數(shù)組的拼接
- 2、 數(shù)組的分割
- 3、 數(shù)組的行列交換
- NumPy 統(tǒng)計(jì)函數(shù)
- 1、 求和
- 2、 求和函數(shù)
- 3、 均值函數(shù)
- 4、 中值函數(shù)
- 5、 最大值與最小值函數(shù)
- 6、 極值函數(shù)
- 7、 標(biāo)準(zhǔn)差函數(shù)
- 小結(jié)
- 對數(shù)組中的 nan 填充均值
- 總結(jié)
學(xué)習(xí)目標(biāo):
NumPy的使用
環(huán)境:
- Anaconda 2.0.4
- Python 3.7.10
- numpy 1.20.2
NumPy安裝:
pip install numPyPython 引入 numpy 庫
import numpy as np學(xué)習(xí)內(nèi)容:
Numpy 數(shù)組操作
- 1、 數(shù)組的拼接
- 2、 數(shù)組的分割
- 3、 數(shù)組的行列交換
NumPy 統(tǒng)計(jì)函數(shù)
- 1、求和
- 2、均值
- 3、中值
- 4、最大值
- 5、最小值
- 6、極值
- 7、標(biāo)準(zhǔn)差
使用步驟
Numpy 數(shù)組操作
1、 數(shù)組的拼接
| hstack | 水平堆疊序列中的數(shù)組(列方向) |
| vstack | 豎直堆疊序列中的數(shù)組(行方向) |
代碼如下(示例):
import numpy as npt1 = np.arange(12).reshape((2, 6)) # 創(chuàng)建一個(gè) 2行6列的數(shù)組 print(t1)t2 = np.arange(12, 24).reshape((2, 6)) print(t2) [[ 0 1 2 3 4 5][ 6 7 8 9 10 11]][[12 13 14 15 16 17][18 19 20 21 22 23]] t3 = np.vstack((t1, t2)) # 豎直拼接 print(t3) [[ 0 1 2 3 4 5][ 6 7 8 9 10 11][12 13 14 15 16 17][18 19 20 21 22 23]] t4 = np.hstack((t1, t2)) # 水平拼接 print(t4) [[ 0 1 2 3 4 5 12 13 14 15 16 17][ 6 7 8 9 10 11 18 19 20 21 22 23]]2、 數(shù)組的分割
| split | 將一個(gè)數(shù)組分割為多個(gè)子數(shù)組 |
| hsplit | 將一個(gè)數(shù)組水平分割為多個(gè)子數(shù)組(按列) |
| vsplit | 將一個(gè)數(shù)組垂直分割為多個(gè)子數(shù)組(按行) |
numpy.split(ary, indices_or_sections, axis)
- axis:設(shè)置沿著哪個(gè)方向進(jìn)行切分,默認(rèn)為 0,橫向切分,即水平方向。為 1 時(shí),縱向切分,即豎直方向。
代碼如下(示例):
import numpy as npt1 = np.arange(12).reshape((2, 6)) t2 = np.arange(12, 24).reshape((2, 6)) t3 = np.vstack((t1, t2)) # 將上面2個(gè)數(shù)組進(jìn)行豎直拼接 print(t3) t4 = np.hstack((t1, t2)) # 將t1 t2兩個(gè)數(shù)組進(jìn)行水平拼接 print(t4) print(np.split(t3, 2, axis=0)) # 使用np.split()函數(shù)將上面的數(shù)組進(jìn)行橫向分割 [array([[ 0, 1, 2, 3, 4, 5],[ 6, 7, 8, 9, 10, 11]]), array([[12, 13, 14, 15, 16, 17],[18, 19, 20, 21, 22, 23]])] print(np.split(t3, 2, axis=1)) # 使用np.split()函數(shù)將上面的數(shù)組進(jìn)行縱向分割 [array([[ 0, 1, 2],[ 6, 7, 8],[12, 13, 14],[18, 19, 20]]), array([[ 3, 4, 5],[ 9, 10, 11],[15, 16, 17],[21, 22, 23]])]注:axis 為 0 時(shí)在水平方向分割,axis 為 1 時(shí)在垂直方向分割。
print(np.hsplit(t4, 2)) # 用 np.hsplit()函數(shù)水平分割分割成2個(gè)數(shù)組 [array([[ 0, 1, 2, 3, 4, 5],[ 6, 7, 8, 9, 10, 11]]), array([[12, 13, 14, 15, 16, 17],[18, 19, 20, 21, 22, 23]])] print(np.vsplit(t3, 2)) # 用 np.vsplit()函數(shù) 垂直分隔成2個(gè)數(shù)組 [array([[ 0, 1, 2, 3, 4, 5],[ 6, 7, 8, 9, 10, 11]]), array([[12, 13, 14, 15, 16, 17],[18, 19, 20, 21, 22, 23]])] print(np.vsplit(t3, 4)) # 用 np.vsplit()函數(shù) 垂直分隔成4個(gè)數(shù)組 [array([[0, 1, 2, 3, 4, 5]]), array([[ 6, 7, 8, 9, 10, 11]]), array([[12, 13, 14, 15, 16, 17]]), array([[18, 19, 20, 21, 22, 23]])]3、 數(shù)組的行列交換
代碼如下(示例):
t = np.arange(12, 24).reshape(3, 4) print(t) [[ 0 1 2 3][ 4 5 6 7][ 8 9 10 11]] print("-------------行交換-------------") t[[1, 2], :] = t[[2, 1], :] # 行交換 第2行與第三行進(jìn)行交換 print(t) [[ 0 1 2 3][ 8 9 10 11][ 4 5 6 7]] print("-------------列交換-------------") t = np.arange(0, 12).reshape(3, 4) t[:, [0, 2]] = t[:, [2, 0]] # 列交換 第1列與第3列進(jìn)行交換,每次交換都會(huì)改變原數(shù)組 print(t) [[ 2 1 0 3][ 6 5 4 7][10 9 8 11]]NumPy 統(tǒng)計(jì)函數(shù)
| sum | 求和 |
| mean | 返回?cái)?shù)組中元素的算術(shù)平均值 |
| np.median | 中值 |
| max | 最大值 |
| min | 最小值 |
| ptp | 極值 |
| std | 標(biāo)準(zhǔn)差 |
注:標(biāo)準(zhǔn)差是一組數(shù)據(jù)平均值分散程度的一種度量。一個(gè)較大的標(biāo)準(zhǔn)差,代表大部分?jǐn)?shù)值和其平均值之間差異較大;一個(gè)較小的標(biāo)準(zhǔn)差,代表這些數(shù)值較接近平均值反映出數(shù)據(jù)的波動(dòng)穩(wěn)定情況,越大表示波動(dòng)越大,越不穩(wěn)定。
1、 求和
代碼如下(示例):
t1 = np.array([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13, np.nan, 15], [16, 17, 18, 19, 20]]) t2 = np.arange(12).reshape((4, 3)) # 創(chuàng)建 4行 3列的數(shù)組 print(t1) print(t2) [[ 0. 2. 3. 4. 5.][ 0. 7. 8. 9. 10.][ 0. 12. 13. nan 15.][ 0. 17. 18. 19. 20.]][[ 0 1 2][ 3 4 5][ 6 7 8][ 9 10 11]] print(np.sum(t2)) # 計(jì)算t2數(shù)組所有的和 66 print(np.sum(t2, axis=0)) # 計(jì)算t2數(shù)組每一行相加的結(jié)果 [18 22 26] print(np.sum(t2, axis=1)) # 計(jì)算t2數(shù)組每一列相加的結(jié)果 [ 3 12 21 30] print(np.sum(t1, axis=0)) # 計(jì)算t1數(shù)組每一行相加的結(jié)果 [ 0. 38. 42. nan 50.] print(np.sum(t1, axis=1)) # 計(jì)算t1數(shù)組每一列相加的結(jié)果 [14. 34. nan 74.]注意:nan和任何值計(jì)算都為nan
2、 求和函數(shù)
# numpy中常用統(tǒng)計(jì)函數(shù) t2 = np.arange(12).reshape((4, 3)) print(t2.sum(axis=0)) # 求和 [18 22 26]3、 均值函數(shù)
print(t2.mean(axis=0)) # 均值 [4.5 5.5 6.5]4、 中值函數(shù)
print(np.median(t2)) # 中值 print(np.median(t2, axis=0)) # 中值 5.5 [4.5 5.5 6.5]5、 最大值與最小值函數(shù)
print(t2.max(axis=0)) # 最大值 print(t2.min(axis=0)) # 最小值 [ 9 10 11] [0 1 2]6、 極值函數(shù)
print(np.ptp(t2)) # 極值, 即最大值和最小值之差 print(np.ptp(t2, axis=0)) 11 [9 9 9]7、 標(biāo)準(zhǔn)差函數(shù)
print(t2.std(axis=0)) # 標(biāo)準(zhǔn)差 [3.35410197 3.35410197 3.35410197]小結(jié)
對數(shù)組中的 nan 填充均值
# coding=utf-8 import numpy as np# 為每一列的nan填充均值 def fill_column_ndarray(t1):for i in range(t1.shape[1]): # 遍歷每一列temp_col = t1[:, i] # 當(dāng)前的一列nan_num = np.count_nonzero(temp_col != temp_col)if nan_num != 0: # 不為0,說明當(dāng)前這一列中有nantemp_not_nan_col = temp_col[temp_col == temp_col] # 當(dāng)前一列不為nan的array# 選中當(dāng)前為nan的位置,把值賦給為不為nan的均值temp_col[np.isnan(temp_col)] = temp_not_nan_col.mean()return t1# 為每一行的nan填充均值 def fill_row_ndarray(t2):for i in range(t1.shape[0]): # 遍歷每一行temp_row = t1[i, :] # 當(dāng)前的一行nan_num = np.count_nonzero(temp_row != temp_row)if nan_num != 0: # 不為0,說明當(dāng)前這一列中有nantemp_not_nan_row = temp_row[temp_row == temp_row] # 當(dāng)前一行不為nan的array# 選中當(dāng)前為nan的位置,把值賦給為不為nan的均值temp_row[np.isnan(temp_row)] = temp_not_nan_row.mean()return t1if __name__ == '__main__':t1 = np.arange(12).reshape((3, 4)).astype("float")t1[1, 0:] = np.nan # 給數(shù)組第二行賦值print("原數(shù)組:")print(t1)t1 = fill_column_ndarray(t1)print("豎向填充均值:")print(t1)print("*" * 25)t2 = np.arange(12).reshape((3, 4)).astype("float")t2[:, 2] = np.nan # 給數(shù)組的第三列賦值print("原數(shù)組:")print(t2)t2 = fill_row_ndarray(t2)print("橫向填充均值:")print(t2) 原數(shù)組: [[ 0. 1. 2. 3.][nan nan nan nan][ 8. 9. 10. 11.]] 豎向填充均值: [[ 0. 1. 2. 3.][ 4. 5. 6. 7.][ 8. 9. 10. 11.]] ************************* 原數(shù)組: [[ 0. 1. nan 3.][ 4. 5. nan 7.][ 8. 9. nan 11.]] 橫向填充均值: [[ 0. 1. 2. 3.][ 4. 5. 6. 7.][ 8. 9. 10. 11.]]總結(jié)
1.Numpy 中包含了一些函數(shù)用于處理數(shù)組,大概可分為以下幾類:
- 修改數(shù)組形狀
- 翻轉(zhuǎn)數(shù)組
- 修改數(shù)組維度
- 連接數(shù)組
- 分割數(shù)組
- 數(shù)組元素的添加與刪除
2.nan和任何值計(jì)算都為nan。
3.axis 為 0 時(shí)在水平方向,axis 為 1 時(shí)在垂直方向。
總結(jié)
以上是生活随笔為你收集整理的Python NumPy的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NoneBot2插件——进群欢迎
- 下一篇: Raspberry Pi 4B 开机自动