
Numpy基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)
import numpy as np
ar = np.array([[1,2,3], [3,4,6], [4,5,7]]) # 二維數(shù)組 print(ar) print(type(ar)) ar
[[1 2 3] [3 4 6] [4 5 7]]numpy.ndarray'=""> array([[1, 2, 3], [3, 4, 6], [4, 5, 7]])
ar = np.array([[1,2,3], [3,4,6], [4,5,7]]) print(ar.ndim) # 輸出數(shù)組維度個(gè)數(shù)(描述這個(gè)數(shù)組是幾維的) print(ar.shape) # 輸出數(shù)組維度形狀 print(ar.size) # 數(shù)組元素的總個(gè)數(shù) print(ar.dtype) # 數(shù)組的元素類型
2 (3, 3) 9 int32
創(chuàng)建數(shù)組
# 方式1 列表創(chuàng)建 ar1 = np.array([0,1,2,3,4,5,6,7,8,9]) print(ar1)
[0 1 2 3 4 5 6 7 8 9]
# 方式2 生成器創(chuàng)建 ar2 = np.array(range(10)) print(ar2)
[0 1 2 3 4 5 6 7 8 9]
# 方式3 arange類似range ar3 = np.arange(10) # 返回0-9 整型 print(ar3) print("") ar3 = np.arange(10.0) # 返回0.0-9.0 浮點(diǎn)型 print(ar3) print("") ar3 = np.arange(5, 11) # 返回5-11之間的整型 不包括11 print(ar3) print("") ar3 = np.arange(5,11,2) # 2代表步長 print(ar3)
[0 1 2 3 4 5 6 7 8 9] [0. 1. 2. 3. 4. 5. 6. 7. 8. 9.] [ 5 6 7 8 9 10] [5 7 9]
# 方式4 隨機(jī)創(chuàng)建 范圍是 0-1 ar4 = np.random.rand(10) # 隨機(jī)生成數(shù)值范圍是 0-1 并且有10個(gè)元素的一維數(shù)組 print(ar4) print(ar4.ndim) # 維度個(gè)數(shù)(告訴你這個(gè)數(shù)組是幾維的)
[0.20490144 0.89930216 0.57403933 0.8923752 0.71947406 0.91049224 0.55663805 0.84965526 0.19433663 0.39087672] 1
# 方式5 均勻間隔創(chuàng)建 # linspace() 返回有num個(gè)元素的數(shù)組 這num個(gè)元素是在10-20上(默認(rèn)包含結(jié)尾)有均勻間隔的元素 ar6 = np.linspace(10, 20, num=20) # 10 11 12 13 14 15 16 17 18 19 20 print(ar6) print("") ar6 = np.linspace(10, 20, num=21) # 如果想按0.5來均等分的話num就要有21個(gè) 可以通過數(shù)個(gè)數(shù)來驗(yàn)證一下 print(ar6) print("") ar6 = np.linspace(10, 20, num=21, endpoint=False) # endpoint=False 表示不包括結(jié)尾 print(ar6) print("") ar6 = np.linspace(10, 20, num=20, endpoint=False) print(ar6) print("") ar6 = np.linspace(10, 20, num=20, endpoint=False, retstep=True) # 返回的一個(gè)元組并顯示步長 retstep=True顯示步長 print(ar6) print("") print(type(ar6)) print("") print(ar6[0]) # 取出數(shù)組 print(ar6[1]) # 取出數(shù)組的步長
[10. 10.52631579 11.05263158 11.57894737 12.10526316 12.63157895 13.15789474 13.68421053 14.21052632 14.73684211 15.26315789 15.78947368 16.31578947 16.84210526 17.36842105 17.89473684 18.42105263 18.94736842 19.47368421 20. ] [10. 10.5 11. 11.5 12. 12.5 13. 13.5 14. 14.5 15. 15.5 16. 16.5 17. 17.5 18. 18.5 19. 19.5 20. ] [10. 10.47619048 10.95238095 11.42857143 11.9047619 12.38095238 12.85714286 13.33333333 13.80952381 14.28571429 14.76190476 15.23809524 15.71428571 16.19047619 16.66666667 17.14285714 17.61904762 18.0952381 18.57142857 19.04761905 19.52380952] [10. 10.5 11. 11.5 12. 12.5 13. 13.5 14. 14.5 15. 15.5 16. 16.5 17. 17.5 18. 18.5 19. 19.5] (array([10. , 10.5, 11. , 11.5, 12. , 12.5, 13. , 13.5, 14. , 14.5, 15. , 15.5, 16. , 16.5, 17. , 17.5, 18. , 18.5, 19. , 19.5]), 0.5)[10. 10.5 11. 11.5 12. 12.5 13. 13.5 14. 14.5 15. 15.5 16. 16.5 17. 17.5 18. 18.5 19. 19.5] 0.5
# 創(chuàng)建元素全為0的數(shù)組 # zeros(shape, dtype=float, order='C') 默認(rèn)為浮點(diǎn)型 ar7 = np.zeros(10) print(ar7) print(ar7.ndim) print("") ar7 = np.zeros((2,5)) print(ar7) print(ar7.ndim) print("") ar7 = np.zeros((2,5), dtype=int) print(ar7)
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.] 1 [[0. 0. 0. 0. 0.] [0. 0. 0. 0. 0.]] 2 [[0 0 0 0 0] [0 0 0 0 0]]
# zeros_likes表示仿造arr創(chuàng)建一個(gè)全為0的數(shù)組 ar8 = np.array(range(10)) print(ar8)
[0 1 2 3 4 5 6 7 8 9]
# zeros_likes表示仿造ar8創(chuàng)建一個(gè)全為0的數(shù)組 ar8 = np.array([list(range(10)), list(range(10,20))]) print(ar8) print("") arr = np.zeros_like(ar8) print(ar8)
[[ 0 1 2 3 4 5 6 7 8 9] [10 11 12 13 14 15 16 17 18 19]] [[ 0 1 2 3 4 5 6 7 8 9] [10 11 12 13 14 15 16 17 18 19]]
# 創(chuàng)建數(shù)值全為1的數(shù)組 ar9 = np.ones(10) print(ar9) print("") ar9 = np.ones((2,5)) print(ar9)
[1. 1. 1. 1. 1. 1. 1. 1. 1. 1.] [[1. 1. 1. 1. 1.] [1. 1. 1. 1. 1.]]
# ones_like表示仿造ar9創(chuàng)建一個(gè)數(shù)值全為1的數(shù)組 ar9 = np.array([list(range(10)), list(range(10,20))]) print(ar9) print("") ar9 = np.ones_like(arr) print(ar9)
[[ 0 1 2 3 4 5 6 7 8 9] [10 11 12 13 14 15 16 17 18 19]] [[1 1 1 1 1 1 1 1 1 1] [1 1 1 1 1 1 1 1 1 1]]
# 創(chuàng)建單位矩陣 ar10 = np.eye(10) print(ar10) print("") print(ar10.ndim)
[[1. 0. 0. 0. 0. 0. 0. 0. 0. 0.] [0. 1. 0. 0. 0. 0. 0. 0. 0. 0.] [0. 0. 1. 0. 0. 0. 0. 0. 0. 0.] [0. 0. 0. 1. 0. 0. 0. 0. 0. 0.] [0. 0. 0. 0. 1. 0. 0. 0. 0. 0.] [0. 0. 0. 0. 0. 1. 0. 0. 0. 0.] [0. 0. 0. 0. 0. 0. 1. 0. 0. 0.] [0. 0. 0. 0. 0. 0. 0. 1. 0. 0.] [0. 0. 0. 0. 0. 0. 0. 0. 1. 0.] [0. 0. 0. 0. 0. 0. 0. 0. 0. 1.]] 2
Numpy通用函數(shù)
import numpy as np
# reshape 改變數(shù)組維度形狀 ar1 = np.arange(10) print(ar1) print("") print(ar1.reshape(5, 2)) # 方式1 print("") ar1 = np.ones((2, 5)) print(ar1) print("") ar1 = np.ones((2, 5)).reshape(5, 2) # 方式2 print(ar1) print("") ar1 = np.reshape(np.arange(9), (3,3)) # 方式3 print(ar1)
[0 1 2 3 4 5 6 7 8 9] [[0 1] [2 3] [4 5] [6 7] [8 9]] [[ 1. 1. 1. 1. 1.] [ 1. 1. 1. 1. 1.]] [[ 1. 1.] [ 1. 1.] [ 1. 1.] [ 1. 1.] [ 1. 1.]] [[0 1 2] [3 4 5] [6 7 8]]
# T 數(shù)組轉(zhuǎn)置 ar2 = np.zeros((2, 5)) print(ar2) print("") print(ar2.T)
[[ 0. 0. 0. 0. 0.] [ 0. 0. 0. 0. 0.]] [[ 0. 0.] [ 0. 0.] [ 0. 0.] [ 0. 0.] [ 0. 0.]]
# resize跟reshape類似 區(qū)別是當(dāng)改變數(shù)組維度時(shí)不會因數(shù)據(jù)量的不同而報(bào)錯 ar3 = np.reshape(np.arange(15), (3, 5)) print(ar3) print("") ar4 = np.resize(ar3, (5, 3)) print(ar4) print("") ar5 = np.resize(ar3, (3, 4)) # 當(dāng)改變后的數(shù)組需要的數(shù)據(jù)量比原數(shù)組的數(shù)據(jù)量少時(shí) 會依次排序 多余的數(shù)值不會顯示 print(ar5) print("") ar6 = np.resize(ar3, (4, 5)) # 當(dāng)改變后的數(shù)組需要的數(shù)據(jù)量比原數(shù)組的數(shù)據(jù)量多時(shí) 不足的會補(bǔ)充排序 print(ar6)
[[ 0 1 2 3 4] [ 5 6 7 8 9] [10 11 12 13 14]] [[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11] [12 13 14]] [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] [[ 0 1 2 3 4] [ 5 6 7 8 9] [10 11 12 13 14] [ 0 1 2 3 4]]
# np.resize(a, shape) 有返回值 不會改變原數(shù)組 ar7 = np.arange(10) print(ar7) print("") ar8 = np.resize(ar7, (2, 5)) print(ar8) print("") print(ar7)
[0 1 2 3 4 5 6 7 8 9] [[0 1 2 3 4] [5 6 7 8 9]] [0 1 2 3 4 5 6 7 8 9]
# a.resize(shape) 沒有返回值 直接改變原數(shù)組 ar7 = np.arange(10) print(ar7) print("") ar8 = ar7.resize(2, 5) # 注意ar8為None 因?yàn)槭歉淖冊瓟?shù)組 所以沒有返回值 print(ar8) print("") print(ar7)
[0 1 2 3 4 5 6 7 8 9] None [[0 1 2 3 4] [5 6 7 8 9]]
# 數(shù)據(jù)類型轉(zhuǎn)換 astype ar9 = np.arange(10, dtype=np.float64) print(ar9) print(ar9.dtype) # 查看數(shù)值類型 print("") ar10 = ar9.astype(np.int64) # 改變數(shù)值類型 print(ar10) print(ar10.dtype)
[ 0. 1. 2. 3. 4. 5. 6. 7. 8. 9.] float64 [0 1 2 3 4 5 6 7 8 9] int64
# 數(shù)組堆疊 # hstack vstack a = np.arange(10) print(a) print("") b= np.arange(10, 20) print(b) print("") c = np.hstack((a, b)) # hstack表示橫向連接 print(c) print("") d = np.vstack((a, b)) # vstack表示縱向連接 print(d) print("")
[0 1 2 3 4 5 6 7 8 9] [10 11 12 13 14 15 16 17 18 19] [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19] [[ 0 1 2 3 4 5 6 7 8 9] [10 11 12 13 14 15 16 17 18 19]] [[ 0 1 2 3 4 5 6 7 8 9] [10 11 12 13 14 15 16 17 18 19]]
# stack print(a) print("") print(b) print("") e = np.stack((a, b), axis=0) # axis=0 橫向看(縱向連接) print(e) print("") e = np.stack((a, b), axis=1) # 縱向看(橫向連接) print(e)
[0 1 2 3 4 5 6 7 8 9] [10 11 12 13 14 15 16 17 18 19] [[ 0 1 2 3 4 5 6 7 8 9] [10 11 12 13 14 15 16 17 18 19]] [[ 0 10] [ 1 11] [ 2 12] [ 3 13] [ 4 14] [ 5 15] [ 6 16] [ 7 17] [ 8 18] [ 9 19]]
# 數(shù)組拆分 a = np.arange(16).reshape(4, 4) print(a) print("") b = np.hsplit(a, 2) # 按列來切割 print(b) print("") c = np.vsplit(a, 2) # 按行來切割 print(c)
[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11] [12 13 14 15]] [array([[ 0, 1], [ 4, 5], [ 8, 9], [12, 13]]), array([[ 2, 3], [ 6, 7], [10, 11], [14, 15]])] [array([[0, 1, 2, 3], [4, 5, 6, 7]]), array([[ 8, 9, 10, 11], [12, 13, 14, 15]])]
# 求和 sum a = np.arange(10).reshape(2, 5) print(a) print("") print(np.sum(a, axis=0)) # 0代表橫軸 print("") print(np.sum(a, axis=1)) # 1代表縱軸
[[0 1 2 3 4] [5 6 7 8 9]] [ 5 7 9 11 13] [10 35]
# 排序 sort print(np.sort(np.array([3, 5, 5, 3, 1, 4])))
[1 3 3 4 5 5]
Numpy基本索引和切片
import numpy as np
# 一維數(shù)組 arr = np.array(range(10)) print(arr) print("") print(arr[4]) print(arr[:3]) print(arr[::2])
[0 1 2 3 4 5 6 7 8 9] 4 [0 1 2] [0 2 4 6 8]
# 二維數(shù)組 arr = np.arange(20).reshape(4, 5) print(arr) print("") print(arr[2]) # 取出某一行 print("") print(arr[2][2]) # 取出某一個(gè)數(shù) print("") print(arr[1:3]) # 取出多行 print("") print(arr[2, 2]) # 逗號前代表行 逗號后代表列 print("") print(arr[:2, 1:3]) # 取出多行多列
[[ 0 1 2 3 4] [ 5 6 7 8 9] [10 11 12 13 14] [15 16 17 18 19]] [10 11 12 13 14] 12 [[ 5 6 7 8 9] [10 11 12 13 14]] 12 [[1 2] [6 7]]
# 三維數(shù)組 arr = np.arange(48).reshape(3,4,4) # 3個(gè)4行4列的數(shù)組 print(arr) print("*"*30) print(arr[2]) print("*"*30) print(arr[2][1]) print("*"*30) print(arr[2][1][1])
[[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11] [12 13 14 15]] [[16 17 18 19] [20 21 22 23] [24 25 26 27] [28 29 30 31]] [[32 33 34 35] [36 37 38 39] [40 41 42 43] [44 45 46 47]]] ****************************** [[32 33 34 35] [36 37 38 39] [40 41 42 43] [44 45 46 47]] ****************************** [36 37 38 39] ****************************** 37
Numpy布爾型索引及切片
# 用布爾型索引去做篩選 arr = np.arange(12).reshape(3, 4) print(arr) print("") a = np.array([True, False, True]) print(a) print("") b = np.array([True, False, False, True]) print(b) print("") print(arr[a, :]) print("") print(arr[:, b])
[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] [ True False True] [ True False False True] [[ 0 1 2 3] [ 8 9 10 11]] [[ 0 3] [ 4 7] [ 8 11]]
# 用布爾型矩陣去做篩選 print(arr) print("") m = arr>5 print(m) print("") n = arr[arr>5] print(n)
[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] [[False False False False] [False False True True] [ True True True True]] [ 6 7 8 9 10 11]
Numpy隨機(jī)數(shù)生成
import numpy as np
# random.normal 正態(tài)分布隨機(jī)數(shù) print(np.random.normal(size=(4, 4))) # 生成一個(gè)4行4列的正態(tài)分布隨機(jī)數(shù)
[[ 1.01645652 -0.30952914 -0.40576099 -0.94259139] [-0.16483869 0.42278586 0.8260384 -0.88469832] [ 1.31487466 -0.86188981 -0.71485117 -2.12449215] [-1.80353888 -0.93264659 -1.1424078 0.31905742]]
# random.rand 平均分布 隨機(jī)生成 [0-1) 之間的數(shù) a = np.random.rand() # 生成一個(gè)數(shù) print(a) print("") b = np.random.rand(4) # 生成4個(gè)數(shù) print(b) print("") c = np.random.rand(2,4) # 生成二維數(shù)組 print(c)
0.11426452609434679 [ 0.79633633 0.32467913 0.28038512 0.56304155] [[ 0.06561635 0.40454132 0.58158716 0.73527881] [ 0.59301023 0.74935326 0.24347665 0.59653582]]
# np.random.randint 在自定義的范圍內(nèi)隨機(jī)生成整數(shù) a = np.random.randint(3) # 在 [0-3)的范圍內(nèi)隨機(jī)生成一個(gè)整數(shù) print(a) print("") b = np.random.randint(2, 10) # [2-10)的范圍內(nèi)隨機(jī)生成一個(gè)整數(shù) print(b) print("") c = np.random.randint(20, size=10) # 生成一個(gè) [0-20) 之間 有10個(gè)整數(shù)元素的一維數(shù)組 print(c) print("") d = np.random.randint(20, 40, size=10) # 生成一個(gè) [20-40) 之間 有10個(gè)整數(shù)元素的一維數(shù)組 print(d) print("") e = np.random.randint(40, 50, size=(2, 5)) # 生成一個(gè) [40-50) 之間 有2行5列元素的二維數(shù)組 print(e)
0 6 [ 9 11 5 12 19 4 19 1 7 10] [24 20 34 38 37 24 26 35 35 30] [[49 42 42 44 49] [44 44 40 49 45]]
數(shù)據(jù)分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
SQL Server 中 CONVERT 函數(shù)的日期轉(zhuǎn)換:從基礎(chǔ)用法到實(shí)戰(zhàn)優(yōu)化 在 SQL Server 的數(shù)據(jù)處理中,日期格式轉(zhuǎn)換是高頻需求 —— 無論 ...
2025-09-18MySQL 大表拆分與關(guān)聯(lián)查詢效率:打破 “拆分必慢” 的認(rèn)知誤區(qū) 在 MySQL 數(shù)據(jù)庫管理中,“大表” 始終是性能優(yōu)化繞不開的話題。 ...
2025-09-18CDA 數(shù)據(jù)分析師:表結(jié)構(gòu)數(shù)據(jù) “獲取 - 加工 - 使用” 全流程的賦能者 表結(jié)構(gòu)數(shù)據(jù)(如數(shù)據(jù)庫表、Excel 表、CSV 文件)是企業(yè)數(shù)字 ...
2025-09-18DSGE 模型中的 Et:理性預(yù)期算子的內(nèi)涵、作用與應(yīng)用解析 動態(tài)隨機(jī)一般均衡(Dynamic Stochastic General Equilibrium, DSGE)模 ...
2025-09-17Python 提取 TIF 中地名的完整指南 一、先明確:TIF 中的地名有哪兩種存在形式? 在開始提取前,需先判斷 TIF 文件的類型 —— ...
2025-09-17CDA 數(shù)據(jù)分析師:解鎖表結(jié)構(gòu)數(shù)據(jù)特征價(jià)值的專業(yè)核心 表結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 規(guī)范存儲的結(jié)構(gòu)化數(shù)據(jù),如數(shù)據(jù)庫表、Excel 表、 ...
2025-09-17Excel 導(dǎo)入數(shù)據(jù)含缺失值?詳解 dropna 函數(shù)的功能與實(shí)戰(zhàn)應(yīng)用 在用 Python(如 pandas 庫)處理 Excel 數(shù)據(jù)時(shí),“缺失值” 是高頻 ...
2025-09-16深入解析卡方檢驗(yàn)與 t 檢驗(yàn):差異、適用場景與實(shí)踐應(yīng)用 在數(shù)據(jù)分析與統(tǒng)計(jì)學(xué)領(lǐng)域,假設(shè)檢驗(yàn)是驗(yàn)證研究假設(shè)、判斷數(shù)據(jù)差異是否 “ ...
2025-09-16CDA 數(shù)據(jù)分析師:掌控表格結(jié)構(gòu)數(shù)據(jù)全功能周期的專業(yè)操盤手 表格結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 存儲的結(jié)構(gòu)化數(shù)據(jù),如 Excel 表、數(shù)據(jù) ...
2025-09-16MySQL 執(zhí)行計(jì)劃中 rows 數(shù)量的準(zhǔn)確性解析:原理、影響因素與優(yōu)化 在 MySQL SQL 調(diào)優(yōu)中,EXPLAIN執(zhí)行計(jì)劃是核心工具,而其中的row ...
2025-09-15解析 Python 中 Response 對象的 text 與 content:區(qū)別、場景與實(shí)踐指南 在 Python 進(jìn)行 HTTP 網(wǎng)絡(luò)請求開發(fā)時(shí)(如使用requests ...
2025-09-15CDA 數(shù)據(jù)分析師:激活表格結(jié)構(gòu)數(shù)據(jù)價(jià)值的核心操盤手 表格結(jié)構(gòu)數(shù)據(jù)(如 Excel 表格、數(shù)據(jù)庫表)是企業(yè)最基礎(chǔ)、最核心的數(shù)據(jù)形態(tài) ...
2025-09-15Python HTTP 請求工具對比:urllib.request 與 requests 的核心差異與選擇指南 在 Python 處理 HTTP 請求(如接口調(diào)用、數(shù)據(jù)爬取 ...
2025-09-12解決 pd.read_csv 讀取長浮點(diǎn)數(shù)據(jù)的科學(xué)計(jì)數(shù)法問題 為幫助 Python 數(shù)據(jù)從業(yè)者解決pd.read_csv讀取長浮點(diǎn)數(shù)據(jù)時(shí)的科學(xué)計(jì)數(shù)法問題 ...
2025-09-12CDA 數(shù)據(jù)分析師:業(yè)務(wù)數(shù)據(jù)分析步驟的落地者與價(jià)值優(yōu)化者 業(yè)務(wù)數(shù)據(jù)分析是企業(yè)解決日常運(yùn)營問題、提升執(zhí)行效率的核心手段,其價(jià)值 ...
2025-09-12用 SQL 驗(yàn)證業(yè)務(wù)邏輯:從規(guī)則拆解到數(shù)據(jù)把關(guān)的實(shí)戰(zhàn)指南 在業(yè)務(wù)系統(tǒng)落地過程中,“業(yè)務(wù)邏輯” 是連接 “需求設(shè)計(jì)” 與 “用戶體驗(yàn) ...
2025-09-11塔吉特百貨孕婦營銷案例:數(shù)據(jù)驅(qū)動下的精準(zhǔn)零售革命與啟示 在零售行業(yè) “流量紅利見頂” 的當(dāng)下,精準(zhǔn)營銷成為企業(yè)突圍的核心方 ...
2025-09-11CDA 數(shù)據(jù)分析師與戰(zhàn)略 / 業(yè)務(wù)數(shù)據(jù)分析:概念辨析與協(xié)同價(jià)值 在數(shù)據(jù)驅(qū)動決策的體系中,“戰(zhàn)略數(shù)據(jù)分析”“業(yè)務(wù)數(shù)據(jù)分析” 是企業(yè) ...
2025-09-11Excel 數(shù)據(jù)聚類分析:從操作實(shí)踐到業(yè)務(wù)價(jià)值挖掘 在數(shù)據(jù)分析場景中,聚類分析作為 “無監(jiān)督分組” 的核心工具,能從雜亂數(shù)據(jù)中挖 ...
2025-09-10統(tǒng)計(jì)模型的核心目的:從數(shù)據(jù)解讀到?jīng)Q策支撐的價(jià)值導(dǎo)向 統(tǒng)計(jì)模型作為數(shù)據(jù)分析的核心工具,并非簡單的 “公式堆砌”,而是圍繞特定 ...
2025-09-10