(一)Numpy庫的安裝
安裝指定版本的Numpy庫,打開命令提示符,輸入下圖內容,只需要將1.25.5的版本修改成個人需要的版本,然后按下回車鍵,numpy庫就安裝在python中:
指定版本numpy庫安裝可能出現與當前python解釋器不適配的報錯情況,numpy庫版本不同,函數功能也有變化,想知道當前電腦的python解釋器適配什么版本的numpy庫,有一下兩種方法:
- 在命令提示符,輸入python,按下回車鍵,查看當前python解釋器版本,然后去瀏覽器搜索當前版本的python解釋器適配哪些numpy庫
- 在命令提示符里,任意輸入一個版本的版本,如果出現報錯,命令提示符也會在報錯的同時,給你適配版本的python解釋器
(二)認識numpy和配置環境
對大量數據進行分析,python中的列表和字典可以存儲大量數據,但是無法對數據進行計算,而numpy庫可以將數據存儲為矩陣的格式,
numpy庫將數據存儲為矩陣的格式的優勢:
- 把數據當作矩陣來處理,可以大大提高運行速度(numpy庫的底層用c封裝,python只是調用代碼,方便用戶操作)
- 極大方便了計算(numpy庫依賴math數學庫)
- 金融行業將大量數據存儲在excel中,但是excel執行的速度沒有numpy庫執行的速度快
數組與矩陣的關系和區別:
- 二維數組可以直接視為矩陣,因為其形狀和索引方式與數學矩陣完全一致
特性 | 矩陣(Mathematics) | 數組(Programming) |
---|---|---|
維度限制 | 僅限二維 | 可有一維、二維、三維及以上 |
示例代碼:
#numpy第三方庫,可以將數據存儲為矩陣的形式
import numpy as np#import numpy:導入numpy庫,as np:取別名為np(可不寫)
#numpy(底層用C,Python):數字,矩陣)處理數據的速度比較忙,:
#科學計算 庫,包含了很多和數學相關的公式#計算一下sin(),cos,tan()
print(np.sin(1))#這里參數為弧度,角度(D)和弧度(R)之間的關系:D = (180/π) × R
#計算一下絕對值
print(np.abs(-1))#abs():求絕對值
# np.還有很多函數,進入源代碼瀏覽一下。
#numpy 還可以進行矩陣運算
#numpy庫依賴math數學庫
(三)創建array
- 矩陣的數據類型叫做ndarray
np.array(...)
是 NumPy 的構造函數,不是任何實例方法- array:將矩陣數據可視化展示
示例代碼和解釋:
#array(數組) ->模擬了矩陣import numpy as np#導入numpy as np#一維數組
list1 = [1,2,3,4,5] #python自帶的列表數據類型
v = np.array(list1)
print(v)#二維數組[多個一維數組構成]
m = np.array([list1,list1,list1])
print(m)#三維數組[多個二維數組構成]
z = np.array([[list1,list1,list1],[list1,list1,list1],[list1,list1,list1]])
print(z)z = np.array([m,m,m])
#更高維的y = np.array([z,z,z])"""
數組的基本屬性
"""
#一維數組
a = v.shape #查詢數組的形狀
b = v.ndim #查詢數組的維度
c = v.size #查詢數組中數據個數
print(type(v))
d = v.dtype #查詢數組中的元素類型,int8, int16, int32, int64: 表示不同長度的有符號整數。
# uint8, uint16, uint32, uint64: 表示不同長度的無符號整數。
# float16, float32, float64 (float 是 float64 的簡寫): 表示不同精度的浮點數。
# complex64, complex128 (complex 是 complex128 的簡寫): 表示復數,其中64和128表示復數的實部和虛部的位數。
# bool: 布爾類型,可以存儲True或False。
# str_: 表示定長字符串,可以通過添加數字來指定字符串的長度,如 'S10' 表示長度為10的字符串。
# object: 表示Python對象類型,可以用來存儲任意Python對象。
#二維數組
a = m.shape
b = m.ndim
c = m.size
print(type(m))
d = m.dtype
#三維數組
z.shape
z.ndim
z.size
type(z)
z.dtype
(四)數組的升維
核心功能:
1.np.array()
將列表轉為NumPy數組
2.reshape()
改變數組形狀,返回新數組
-1
:自動計算該維度大小例:
v.reshape(4,-1)
?→ 4行,列數自動推算
3.ndim
?查看數組維度數(如二維數組返回?
2
)
4.resize()
直接修改原數組,無返回值
例:
v.resize(4,4)
?→ 強制將原數組變為4×4
示例代碼和解釋:
import numpy as nplist1 = [1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8]# list1:[1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8]
v = np.array(list1)# v:[1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8]
print(v)#一維變二維[-1表示自己計算]【返回一個改變后的矩陣】
# a.reshape(newshape, order='C')
# a:要重新形狀的數組。
# newshape:一個整數或者元組,用于定義新的形狀。
# order:可選參數,指定元素在數組中的讀取順序。'C'意味著按行,'F'意味著按列,'A'意味著原順序,'K'意味著元素在內存中的出現順序。
r1 = v.reshape(4,4)r1 = v.reshape(4,-1)
print(r1)
r1.ndim#一維變三維
r2 = v.reshape(1,-1,2)#16/1=16表示一個維度里有16個數據,16/2=8表示每個維度里有8行數據,2表示2列數據
print(r2)#二維變三維
r3 = r1.reshape(2,2,4)
print(r3)#resize()【不返回計算結果】【直接修改原始數組】
#r4 = v.resize(2,4)
#print(r4)
r4 = v.resize(4,4)#直接會修改原始數據到相應的維度
print(v)
(五)數組的降維
核心功能:
1. 創建 & 升維
np.array(list1)
?→ 將列表轉為NumPy數組(默認一維)v.reshape(2,2,2)
?→ 將數組升維為?2×2×2 的三維數組
2. 查看維度
v.ndim
?→ 返回數組的維度數(此處為?3
)
3. 降維為二維
v.reshape(1,8)
?→ 將三維數組降維為?1行8列的二維數組
4. 降維為一維
ravel()
:展平為一維(可能共享內存,修改可能影響原數組)flatten()
:展平為一維(獨立副本,修改不影響原數組)
5. 直接修改形狀
v.shape = (2,4)
?→?就地修改原數組為 2×4 的二維數組矩陣在內存條里是以鏈式結構的形式存儲的,通過矩陣的形式去表達
可以通過shape修改屬性的方式,實現對數據的降維
示例代碼:
import numpy as nplist1 = [1,2,3,4,5,6,7,8]
v = np.array(list1)
v = v.reshape(2,2,2)
print(v)
v.ndim#將三維降到二維
r1 = v.reshape(1,8)
print(r1)
r1.ndim#將高維數據轉化為一維
#ravel()
r2 = v.ravel()
print(r2)
r2.ndim#flatten()
r3 = v.flatten()#非常重要,
print(r3)
# flatten方法返回的是原數組的副本,這意味著對返回的一維數組所做的任何修改都不會影響原始的多維數組。
# ravel方法(如果可能)返回的是原始數組的視圖,因此對返回的一維數組所做的修改可能會影響原始的多維數組。這是因為ravel只是改變了數組的形狀和步長,而沒有復制數據。#小補充shape也可以實現降維
v.shape = (2,4)#通過直接對array數據的屬性進行修改。
print(v)
(六)創建特殊的數組
核心功能:
1. 創建全零數組?np.zeros()
功能:生成指定形狀的數組,所有元素初始化為0
示例:
a = np.zeros(5)
?→ 一維數組?[0., 0., 0., 0., 0.]
(浮點型)b = np.zeros((2,2))
?→ 二維數組?[[0., 0.], [0., 0.]]
c = np.zeros((3,2,2))
?→ 三維數組(3×2×2),全為0
特點:默認生成浮點數(
float64
),適用于數學計算
2. 創建全一數組?np.ones()
功能:生成指定形狀的數組,所有元素初始化為1
示例:
d = np.ones(5)
?→ 一維數組?[1., 1., 1., 1., 1.]
e = np.ones((2,2))
?→ 二維數組?[[1., 1.], [1., 1.]]
f = np.ones((2,2,2))
?→ 三維數組(2×2×2),全為1
3. 創建自定義填充值的數組?np.full()
功能:生成指定形狀的數組,所有元素填充為給定值
示例:
g = np.full((2,2,2), 5)
?→ 三維數組(2×2×2),所有元素為5語法:
np.full(shape, fill_value)
4. 生成單位矩陣?np.eye()
功能:生成對角線為1、其余為0的矩陣(可指定行列數)
示例:
h = np.eye(5,7)
?→ 5行7列的矩陣,主對角線為1,其余為0特點:用于稀疏矩陣初始化或線性代數運算
關鍵注意事項
數據類型:所有數組默認以浮點數(
float64
)創建,適合數學計算形狀參數:通過元組指定多維形狀(如?
(2,2)
?表示二維數組)應用場景:常用于初始化權重矩陣、占位符數組或數值模擬中的初始條件
示例代碼:
import numpy as np#創建全為0的數組
a = np.zeros(5)#a:[0. 0. 0. 0.]
#a表示為帶小數的浮點數類型(float64),所有矩陣表達是帶.的
b = np.zeros((2,2))#(2,2)np.zeros((2,2))
#zeros只能接受一個參數,(2,2)為元組形式
c = np.zeros((3,2,2))#創建全為1的數組
d = np.ones(5)
e = np.ones((2,2))
f = np.ones((2,2,2))#創建全為2的數組 矩陣中全部填充指定的數據
g = np.full((2,2,2), 5)#小補充
h = np.eye(5,7)#生成單位矩陣
print('hello')
#默認創建矩陣時,都是以浮點數的形式創建的,方便數學計算
(七)numpy中常用的兩個函數
核心功能:
1.?np.arange()
?—— 按步長生成形如?range()
?的數組
功能:類似 Python 內置的?
range()
,但返回?NumPy 數組語法:
np.arange(start, end, step)
特點:
左閉右開區間:包含?
start
,不包含?end
步長控制:通過?
step
?指定元素間的增量
- 示例:
r1 = np.arange(0, 9, 3) # 輸出: [0, 3, 6]
解釋:從 0 開始,每次增加 3,直到小于 9(不包含 9)
2.?np.linspace()
?—— 生成指定數量的等間距數值
功能:在指定區間內生成?固定數量?的等間距數值
語法:
np.linspace(start, end, num)
特點:
閉區間:同時包含?
start
?和?end
均勻分布:自動計算步長以匹配指定數量?
num
- 示例:
r2 = np.linspace(0, 1, 21) # 輸出: [0.0, 0.05, 0.1, ..., 1.0]
解釋:從 0 到 1,生成 21 個等間距數值(含端點)
關鍵區別:
特征 | np.arange() | np.linspace() |
---|---|---|
區間性質 | 左閉右開 | 閉區間(包含兩端) |
控制方式 | 通過?step ?控制步長 | 通過?num ?控制總點數 |
適用場景 | 整數序列、已知步長的場景 | 精確控制點數、浮點數場景 |
典型用途 | 迭代循環、離散采樣 | 科學計算、繪圖坐標軸 |
示例代碼:
import numpy as np#1.arange(start, end, step) -> range(start, end, step)
# [左閉右開的區間]一次性產生規律的數據。
r1 = np.arange(0,9,3)
print(r1)#2.linspace(start, end, nums)
# [左右都是閉區間]
r2 = np.linspace(0,1,21)
print(r2)
(八)一維數組元素的選取與修改
[ ]的功能:
- 創建一個列表
- 索引/切片
核心功能:
1. 創建數組?np.arange()
功能:生成指定范圍內的等差數列(類似 Python 的?
range()
)示例:
array1 = np.arange(1,9,1)
?→ 創建數組?[1,2,3,4,5,6,7,8]
參數說明:起始值=1,終止值=9(不含),步長=1
2. 單個元素選取
語法:
array[index]
示例:
a = array1[1]
?→ 選取第二個元素(索引從0開始),結果為?2
特點:通過整數索引直接訪問特定位置的元素
3. 多個元素選取
語法:
array[[indices]]
示例:
b = array1[[1,3,5]]
?→ 選取索引為1、3、5的元素,結果為?[2,4,6]
特點:通過列表傳遞多個索引,返回對應位置的元素集合
4. 切片操作(左閉右開)
語法:
array[start:end]
示例:
c = array1[0:6]
?→ 選取索引0到5的元素(含0,不含6),結果為?[1,2,3,4,5,6]
規則:遵循“左閉右開”原則,即包含起始索引,不包含結束索引
5. 修改單個元素
語法:
array[index] = new_value
示例:
array1[0] = 10
?→ 將第一個元素修改為?10
效果:原數組被直接修改,后續打印會反映新值
6. 批量修改元素
語法:
array[[indices]] = new_value
示例:
array1[[1,3,5]] = 20
?→ 將索引1、3、5的元素修改為?20
效果:一次性修改多個指定位置的元素值
7. 切片批量修改
語法:
array[start:end] = new_value
示例:
array1[0:6] = 100
?→ 將索引0到5的所有元素修改為?100
效果:對切片范圍內的所有元素統一賦值
示例代碼:
import numpy as nparray1 = np.arange(1,9,1)
print(array1)#選取某個元素
a = array1[1]#選取某些元素
b = array1[[1,3,5]]#切片(左閉右開)
c = array1[0:6]#修改某個元素
print(array1)
array1[0] = 10#批量修改某些元素
array1[[1,3,5]] =20
print(array1)array1[0:6] = 100
print(array1)
(九)二維數組元素的選取與修改
核心功能:
一、創建二維數組
np.arange().reshape()
功能:生成連續數值并重塑為指定形狀的二維數組
示例:
array1 = np.arange(24).reshape(4,6)
np.arange(24)
?→ 生成0~23的一維數組.reshape(4,6)
?→ 重塑為4行6列的二維數組
輸出示例:
[[ 0 1 2 3 4 5][ 6 7 8 9 10 11][12 13 14 15 16 17][18 19 20 21 22 23]]
二、元素選取與切片
1.?單個元素選取
語法:
array[row, col]
示例:
a = array1[1,4]
?→ 選取第2行(索引1)、第5列(索引4)的元素(值為10
)
2.?選取整行
語法:
array[row, :]
示例:
b = array1[3,:]
?→ 選取第4行(索引3)的所有列(結果為?[18,19,20,21,22,23]
)
3.?選取連續多行
語法:
array[start_row:end_row, :]
示例:
c = array1[0:2,:]
?→ 選取前2行(索引0和1)的所有列
4.?選取非連續多行
語法:
array[[rows], :]
示例:
d = array1[[0,2],:]
?→ 選取第1行(索引0)和第3行(索引2)的所有列
5.?選取單列
語法:
array[:, col]
示例:
e = array1[:,3]
?→ 選取第4列(索引3)的所有行(結果為?[3,9,15,21]
)
6.?選取多列
方式1:連續列 →?
array[:, start_col:end_col]
示例:
f = array1[:,0:3]
?→ 選取前3列(索引0、1、2)
方式2:非連續列 →?
array[:, [cols]]
示例:
g = array1[:,[0,3]]
?→ 選取第1列(索引0)和第4列(索引3)
三、修改元素
1.?修改單個元素
語法:
array[row, col] = new_value
示例:
array1[1,4] = 100
?→ 將第2行第5列的元素改為100
2.?修改整行
語法:
array[row, :] = new_values
示例:
array1[3,:] = 100
?→ 將第4行的所有元素改為100
3.?修改多行
語法:
array[[rows], :] = new_values
示例:
array1[[0,2],:] = 50
?→ 將第1行和第3行的所有元素改為50
關鍵規則總結:
操作類型 | 語法示例 | 說明 |
---|---|---|
單個元素 | array[i,j] | 精確定位到某單元格 |
整行 | array[i,:] | 冒號表示該維度的全部 |
連續多行 | array[i:j,:] | 左閉右開區間 |
非連續多行 | array[[i,k],:] | 用列表傳遞非連續索引 |
單列 | array[:,j] | 所有行的某一列 |
多列(連續) | array[:,i:j] | 左閉右開區間 |
多列(非連續) | array[:,[i,k]] | 用列表傳遞非連續索引 |
修改操作 | array[...] = value | 直接賦值,原數組被永久修改 |
示例代碼:
import numpy as nparray1 = np.arange(24).reshape(4,6)#array數據 .reshape()
print(array1)#選取某個元素
a = array1[1,4]#第2行第5列#選取某行元素
b = array1[3,:] #逗號是用分隔 行和列。#選取某些行
c = array1[0:2,:]
d = array1[[0,2],:]#如果不是獲取連續的行,[]#選取某列
e = array1[:,3]#選取某些列
f = array1[:,0:3]
g = array1[:,[0,3]]#修改元素
#修改某個元素
array1[1,4] = 100
print(array1)#修改某行元素
array1[3,:] = 100
print(array1)
array1[[0,2],:] = 50
print(array1)
(十)三維數組元素的選取與修改
核心功能:
一、創建三維數組
np.arange().reshape()
- 功能:生成連續數值并重塑為指定形狀的三維數組
- 示例:
array1 = np.arange(48).reshape(2,4,6)
np.arange(48)
?→ 生成0~47的一維數組.reshape(2,4,6)
?→ 重塑為?2層 × 4行 × 6列?的三維數組
- 結構說明:
- 第一維(深度):2個二維數組(稱為“塊”)
- 第二維(行):每個塊有4行
- 第三維(列):每行有6列
二、元素選取與切片
1. 單個元素選取
語法:
array[depth, row, col]
示例:
a = array1[1,0,0]
?→ 選取第2層(索引1)、第1行(索引0)、第1列(索引0)的元素(值為24
)
2.?選取某行元素
語法:
array[depth, row, :]
示例:
b = array1[0,1,:]
?→ 選取第1層(索引0)、第2行(索引1)的所有列(結果為?[6,7,8,9,10,11]
)
3.?選取連續多行
語法:
array[depth, start_row:end_row, :]
示例:
c = array1[0,1:3,:]
?→ 選取第1層中第2~4行(索引1到2,左閉右開)的所有列
4.?選取非連續多行
語法:
array[depth, [rows], :]
示例:
d = array1[0,[1,3],:]
?→ 選取第1層中第2行(索引1)和第4行(索引3)的所有列
5.?選取某列
語法:
array[depth, :, col]
示例:
e = array1[1,:,1]
?→ 選取第2層中所有行的第2列(索引1)(結果為?[24,25,26,27]
)
6.?選取多列
方式1:連續列 →?
array[depth, :, start_col:end_col]
示例:
f = array1[1,:,1:4]
?→ 選取第2層中所有行的第2~5列(索引1到3,左閉右開)
方式2:非連續列 →?
array[depth, :, [cols]]
示例:
g = array1[1,:,[1,4]]
?→ 選取第2層中所有行的第2列(索引1)和第5列(索引4)
三、修改元素
語法:array[depth, row, col] = new_value
- 示例:
array1[1,0,0] = 100
?→ 將第2層、第1行、第1列的元素修改為100
- 特點:就地修改原數組,無返回值
關鍵規則總結:
操作類型 | 語法示例 | 說明 |
---|---|---|
單個元素 | array[d,r,c] | 精確定位到某單元格 |
整行 | array[d,r,:] | 冒號表示該維度的全部 |
連續多行 | array[d,r_start:r_end,:] | 左閉右開區間 |
非連續多行 | array[d,[r1,r2],:] | 用列表傳遞非連續索引 |
單列 | array[d,:,c] | 所有行的某一列 |
多列(連續) | array[d,:,c_start:c_end] | 左閉右開區間 |
多列(非連續) | array[d,:,[c1,c2]] | 用列表傳遞非連續索引 |
修改操作 | array[...] = value | 直接賦值,原數組被永久修改 |
代碼示例:
import numpy as nparray1 = np.arange(48).reshape(2,4,6)
print(array1)#選取某個元素
#首先確定選取哪一個二維數組
a = array1[1,0,0]#選取某行元素
b = array1[0,1,:]#選取某些行元素
c = array1[0,1:3,:]
d = array1[0,[1,3],:]#選取某列
e = array1[1,:,1]#選取某些列
f = array1[1,:,1:4]
g = array1[1,:,[1,4]]#修改
array1[1,0,0]=100
print(array1)