目錄
1.數組(矩陣)的組合
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
2.數組(矩陣)的切割
3.數組的數學運算
4.數組的深拷貝和淺拷貝
5.隨機模塊
6.矩陣統計運算
7.矩陣的特有運算點積,求逆
8.文件讀取和保存
1.數組(矩陣)的組合
- 水平組合(
hstack
)和垂直組合(vstack
):hstack
?將多個矩陣按列方向拼接(如三行三列 + 三行三列 → 三行六列)。vstack
?將多個矩陣按行方向拼接(如三行三列 + 三行三列 → 六行三列)。
- ?
concatenate
?函數,可通過?axis
?參數指定組合方向(axis=0
?為垂直,axis=1
?為水平)。import numpy as np array1=np.arange(9).reshape(3,3) print(array1) [[0 1 2][3 4 5][6 7 8]] array2=2*array1 print(array2) [[ 0 2 4][ 6 8 10][12 14 16]]# 水平組合 a3=np.hstack((array1,array2)) print(a3) [[ 0 1 2 0 2 4][ 3 4 5 6 8 10][ 6 7 8 12 14 16]] a4=np.hstack((array2,array1)) print(a4) [[ 0 2 4 0 1 2][ 6 8 10 3 4 5][12 14 16 6 7 8]] a5=np.hstack((array1,array2,array1)) print(a5) [[ 0 1 2 0 2 4 0 1 2][ 3 4 5 6 8 10 3 4 5][ 6 7 8 12 14 16 6 7 8]] a6=np.concatenate((array1,array2),axis=0)#連接 print(a6) [[ 0 1 2][ 3 4 5][ 6 7 8][ 0 2 4][ 6 8 10][12 14 16]] #垂直組合 a7=np.vstack((array1,array2)) print(a7) [[ 0 1 2][ 3 4 5][ 6 7 8][ 0 2 4][ 6 8 10][12 14 16]]
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
2.數組(矩陣)的切割
- 水平切割(
hsplit
)和垂直切割(vsplit
):hsplit(array, 2)
?將矩陣水平切分為兩部分(如四行四列 → 兩個四行兩列)。vsplit
?按行切分(如四行四列 → 兩個兩行四列)。
- ?
split()
函數,通過?axis
?參數指定切分方向。import numpy as np array1=np.arange(16).reshape(4,4) print(array1) [[ 0 1 2 3][ 4 5 6 7][ 8 9 10 11][12 13 14 15]]# 水平切割 a=np.hsplit(array1,2)#2表示二等分切割 print(a) [array([[ 0, 1],[ 4, 5],[ 8, 9],[12, 13]]), array([[ 2, 3],[ 6, 7],[10, 11],[14, 15]])]b=np.split(array1,2,axis=1) print(b) [array([[ 0, 1],[ 4, 5],[ 8, 9],[12, 13]]), array([[ 2, 3],[ 6, 7],[10, 11],[14, 15]])]# 垂直切割 c=np.vsplit(array1,2) print(c) [array([[0, 1, 2, 3],[4, 5, 6, 7]]), array([[ 8, 9, 10, 11],[12, 13, 14, 15]])]d=np.split(array1,2,axis=0) print(d) [array([[0, 1, 2, 3],[4, 5, 6, 7]]), array([[ 8, 9, 10, 11],[12, 13, 14, 15]])]
- 補充:強制切割(
array_split
),當無法均分時按近似規則切分(如五行五列按列切三份 → 2列+2列+1列)。# 強制切割 # 水平切割 e=np.array_split(array1,3,axis=1) #垂直切割 f=np.array_split(array1,3,axis=0)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
3.數組的數學運算
import numpy as np
array1=np.arange(1,5,1).reshape(2,2)
print(array1)
[[1 2][3 4]]
array2=2*array1
print(array2)
[[2 4][6 8]]# 數組的加法運算(對應位置的元素求和)
print(array1+array2)
[[ 3 6][ 9 12]]
# 數組的減法運算(對應位置的元素求差)
print(array1-array2)
[[-1 -2][-3 -4]]
# 數組的乘法運算(對應位置的元素相乘)
print(array1*array2)
[[ 2 8][18 32]]
# 數組的除法運算(對應位置的元素相除)
print(array1/array2)
[[0.5 0.5][0.5 0.5]]
# 數組的取余運算(%)
print(array1%array2)
[[1 2][3 4]]
# 數組的取整運算
print(array1//array2)
[[0 0][0 0]]
4.數組的深拷貝和淺拷貝
淺拷貝(賦值)會導致原數組與拷貝數組同步修改(如 array2 = array1)。
深拷貝(array.copy())獨立于原數組,修改不影響原數據。
5.隨機模塊
使用隨機種子(numpy.random.seed)控制隨機數生成,僅對 numpy.random 有效。
生成隨機數的方法:randint(整數)、rand(0-1小數)、normal(正態分布)。
正態分布參數:均值(loc)控制中心位置,標準差(scale)控制離散程度。
批量生成隨機矩陣(如 size=(5,5))。
import numpy as np
r1=np.random.rand()
print(r1)
0.8149436420776961r2=np.random.normal()
print(r2)
-1.1160570318641674# 生成隨機數矩陣
r3=np.random.randint(0,10,size=(5,5))
print(r3)
[[8 9 2 2 6][4 9 7 9 7][0 0 9 7 8][1 4 1 8 0][2 0 2 2 9]]r4=np.random.rand(5,5)
print(r4)
[[0.60023193 0.01419595 0.05549209 0.67160039 0.78314385][0.19544064 0.73777977 0.85955638 0.34585567 0.13006794][0.36708803 0.16558952 0.44353464 0.06849265 0.86387693][0.05052874 0.16835242 0.04308036 0.19164382 0.27588562][0.40844913 0.22696977 0.47796595 0.0091897 0.37547072]]r5=np.random.normal(5,10,size=(5,5))
print(r5)
[[ 1.0609002 -8.5392921 9.48242322 0.75154795 3.48753174][ -4.0785129 8.4907759 6.11792809 2.05999932 -1.01203744][ -9.74659156 5.86627773 -6.91534249 28.65949618 -4.39634281][ -3.26680732 2.22344898 -0.54337157 -3.92376473 15.58922743][-15.10813251 -1.25358692 -9.96625947 4.65529048 -7.1070343 ]]
6.矩陣統計運算
基礎統計:方差(var)、標準差(std)、均值(mean)、求和(sum)、中位數(median)。
按行/列求和:通過 axis 參數(axis=1 為行,axis=0 為列)。
import numpy as nparray1=np.random.normal(size=(3,3))
print(array1)
[[-1.84629 -1.50233883 -0.30569565][-1.01779658 -1.12859979 0.48594668][ 1.01978122 -1.22772969 -0.22122007]]# 求方差
print(array1.var())
0.8039318921061643# 求標準差
print(array1.std())
0.8966224914121685# 求均值
print(array1.mean())
-0.638215856182889# 求和
print(array1.sum())
-5.743942705646001
# 求中位數
print(np.median(array1))
-1.0177965755982301
# 對矩陣的行求和
print(array1.sum(axis=1))
[-3.65432448 -1.66044968 -0.42916854]
# 對矩陣的列求和
print(array1.sum(axis=0))
[-1.84430536 -3.85866831 -0.04096904]
7.矩陣的特有運算點積,求逆
- 點乘:
a.dot(b)
?或?numpy.dot(a, b)
,示例演示了矩陣乘法規則(如形狀匹配)。 - 求逆:
numpy.linalg.inv
,驗證逆矩陣的正確性(原矩陣與逆矩陣相乘為單位矩陣)。import numpy as np a=np.arange(4).reshape(2,2) [[0 1][2 3]] b=a.copy() [[0 1][2 3]] a1=a.dot(b) print(a1) [[ 2 3][ 6 11]] a2=np.dot(a,b) print(a2) [[ 2 3][ 6 11]] # 并不是所有矩陣都有逆,即使你沒有,也會給你一個偽逆 a3=np.linalg.inv(a) print(a3) [[-1.5 0.5][ 1. 0. ]]
8.文件讀取和保存
- 直接讀取文本文件為矩陣:
numpy.loadtxt
,支持按分隔符解析數據,對于使用 tab 鍵分隔的文件,分隔符應設置為 \t;對于 CSV 文件,分隔符應設置為逗號(,)。 - numpy.save 將矩陣存儲為文件,存儲的文件可直接打開查看矩陣內容。
- 優勢:避免手動轉換字符串為數值類型,適合機器學習數據預處理
# import numpy as np # data = np.loadtxt('',delimiter='')#delimiter指定分隔符# 將數組保存到txt文件中 import numpy as np array=np.array([[1,2,3],[4,5,6],[7,8,9]]) np.savetxt('array.txt',array)