内容:矩陣mat、通用函數、除法、線性計算等
1、矩陣
import numpy as np
# 建立矩陣
print("####建立矩陣####")
a = np.mat("1 2 3;4 5 6") # 通過str建立
b = np.mat(np.arange(10).reshape(5,2)) # 通過ndarray建立
c = np.matrix(np.arange(6).reshape(3,2)) # matrix函數建立
# 矩陣的屬性
print("####矩陣的屬性####")
transpose_a = a.transpose # 矩陣轉置
transpose_a2 = a.T # 矩陣轉置
inverse_a = a.I # 矩陣的逆
base_array_a = a.A # 基于矩陣的數組
hermitian_a = a.H # 共轭元素矩陣
# 矩陣的方法
print("####矩陣的方法####")
a.all() # 沿給定的軸判斷矩陣中所有元素是否為真(0:假,1:真) true
a.any() # 沿給定的軸判斷矩陣中任意元素是否為真,隻要有一個不等于0即為真 true
a.argmax() # 沿給定的軸傳回矩陣中最大元素的索引 5
a.argmin() # 沿給定軸傳回矩陣中最小元素的索引 0
arr = np.array([[0, 4, 2], [0, 0, 5]])
arr.argsort() # 傳回從小到大排序後的索引矩陣 [[0 2 1],[1 0 2]]
a.astype("float") # 更改矩陣中元素的資料類型
a.clip(1, 2) # 傳回新的矩陣,比給定元素大的元素為2,比給定元素小的為1 [[1 2 2],[2 2 2]]
arr2 = a.copy() # 複制一個矩陣給另一個對象
a.cumsum() # 沿指定軸累計求和(保留中間解果)[1 3 6 10 15 21]
a.cumprod() # 沿指定軸累計求積
a.diagonal() # 傳回對角線元素([1,5])
np.dot(a.T, b) # 矩陣點乘
a.dump(r"C:\Users\67505\Desktop\建立文本文檔.txt") # 将矩陣存儲為指定檔案
a.dumps() # 将矩陣的資料轉換成字元串
a.fill(10) # 将矩陣中所有元素填充為指定的value
a.getA() # 傳回自己(ndarray)
a.getA1() # 傳回扁平的一維數組
a.getT() # 傳回轉置矩陣
a.getI() # 傳回逆矩陣
a.getH() # 傳回共轭矩陣
a.max(axis=1) # 傳回指定軸的最大值
a.min() # 傳回指定軸的最小值
a.mean() # 傳回指定軸的平均值
arr.nonzero() # 傳回非零元素的索引矩陣
a.prod() # 傳回矩陣元素的乘積 1000000
a.ptp() # 指定軸方向最大值減去最小值
a.put([0, 1, 4], [1, 2, 8]) # 用給定的value替換矩陣指定索引對應的元素
a.repeat(3, axis=1) # 重複矩陣中的每個元素,跨列
a.reshape((3, 2)) # 更改矩陣形狀(拷貝)
a.resize((3, 2)) # 更改矩陣形狀(視圖)
a.sort() # 對矩陣進行排序(視圖)
a.std()
a.sum()
a.swapaxes(0, 1) # 交換兩個軸方向上的資料
a.take([1, 2, 3]) # 提取指定索引位置的資料
a.trace()
a.transpose()
a.var()
a.view() # 傳回視圖
2、通用函數ufunc
ufunc函數對象本身還有一些方法,這些方法隻對兩個輸入,一個輸出的ufunc函數有效,其他的ufunc對象調用這些方法會抛出valueError異常。
a = np.array([[1, 2, 3], [4, 5, 6]])
# 累計reduce()
np.add.reduce(a) # [5 7 9] 預設axis=0
np.add.reduce(a, axis=1) # [6,15]
# 累計accmulate(),保留中間計算結果
np.add.accumulate(a, axis=1) # array([[1,3,6],[4,9,15]])
# 累計reduceat()
# [1,2,3,3] a[0]=1,a[1]=2,a[0]+a[1]=3,a[2]=3
np.add.reduceat(np.array([1, 2, 3]), indices=[0, 1, 0, 2])
# outer()對其兩個參數數組的每兩個元素的組合進行計算
'''
*| 2 3 4
-----------
1| 2 3 4
2| 4 6 8
3| 6 9 12
4| 8 12 16
5|10 15 20
'''
np.multiply.outer([1,2,3,4,5],[2,3,4])
3、數組的除法運算(divide,true_divide,floor_division)
a = np.array([2, 6, 5])
b = np.array([1, 2, 3])
# divide和true_divide與數學中的除法定義接近,傳回除法的浮點數結果(numpy version 1.13.3)
np.divide(a, b) # [ 2. 3. 1.66666667]
np.true_divide(a, b) # [ 2. 3. 1.66666667]
# floor_divide保留結果中的整數部分
np.floor_divide(a, b) # [2 3 1]
計算數組的餘數(mod,remainder,fmod)
# 計算餘數
a = np.arange(-4, 4)
# remainder函數逐個傳回兩個數組中元素相除後的餘數,整除傳回0
np.remainder(a, 2) # [0 1 0 1 0 1 0 1]
# mod與remainder功能一緻
np.mod(a, 2) # [0 1 0 1 0 1 0 1]
# %為remainder的簡寫
print(a % 2)
# fmod函數處理負數不同,餘數的正負号由被除數決定
print(np.fmod(a, 2)) # [ 0 -1 0 -1 0 1 0 1]
4、線性代數
線性代數是數學的一個重要分支,numpy.linalg子產品包含線性代數的函數,使用這個子產品可以計算矩陣的逆、特征值、求解線性方程組、求解行列式
4.1、求解矩陣的逆
print("####線性代數####")
matrix_a = np.mat(np.array([[1, 2, 3], [6, 4, 3], [2, 3, 4]]))
# 計算矩陣的逆
inverse_a1 = matrix_a.I
inverse_a2 = np.linalg.inv(matrix_a)
4.2、求解線性方程組
import numpy as np
# 解線性方程組
matrix_a = np.mat(np.array([[1, 2, 3], [6, 4, 3], [2, 3, 4]]))
b = np.array([0, 8, 3])
#使用solve函數求解齊次線性方程組
x = np.linalg.solve(matrix_a, b)
print(x) # [-10. 29. -16.]
4.3、求解特征值和特征向量
求解Ax=λx中的特征值λ和特征向量x,eigvals函數可以計算矩陣的特征值,eigvals求解矩陣的特征值,eig求解包含特征值和特征向量的元組
matrix_a = np.mat(np.array([[1, 2, 3], [6, 4, 3], [2, 3, 4]]))
b = np.array([0, 8, 3])
# 求解特征值
eigvals_a = np.linalg.eigvals(matrix_a)
# 求解特征向量和特征值
eig_a = np.linalg.eig(matrix_a)
4.4、奇異值分解
# 奇異值分解
U, Sigma, V = np.linalg.svd(matrix_a, full_matrices=False)
print(U, Sigma, V)
# 奇異值矩陣
sigma_matrix = np.diag(Sigma)