【Python】Numpy中对向量、矩阵的使用
生活随笔
收集整理的這篇文章主要介紹了
【Python】Numpy中对向量、矩阵的使用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在下面的代碼里面,我們利用numpy和scipy做了很多工作,每一行都有注釋,講解了對應的向量/矩陣操作。
歸納一下,下面的代碼主要做了這些事:
一起來看代碼吧:
# 加載numpy庫 import numpy as npfrom scipy import sparse# 創建一個一維數組表示一個行向量 vector_row = np.array([1, 2, 3])# 創建一個一維數組表示一個列向量 vector_column = np.array([[1], [2], [3]])# 創建一個二維數組表示一個矩陣 matrix1 = np.array([[1, 2], [1, 2], [1, 2]])# 利用Numpy內置矩陣數據結構 matrix1_object = np.mat([[1, 2], [1, 2], [1, 2]])# 創建一個新的矩陣 matrix2 = np.array([[0, 0], [0, 1], [3, 0]])# 創建一個壓縮的稀疏行(CSR)矩陣 matrix2_sparse = sparse.csc_matrix(matrix2)# 查看稀疏矩陣 print(matrix2_sparse)# 創建一個更大的矩陣 matrix_large = np.array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],[0, 1, 0, 0, 0, 0, 0, 0, 0, 0],[3, 0, 0, 0, 0, 0, 0, 0, 0, 0]])# 創建一個CSR矩陣 matrix_large_sparse = sparse.csr_matrix(matrix_large)# 查看更大的稀疏矩陣 print(matrix_large_sparse)# 創建一個行向量 vector = np.array([1, 2, 3, 4, 5, 6])# 創建矩陣 matrix_vector = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])# 選擇向量的第三個元素 print(vector[2])# 選擇第二行第二列 print(matrix_vector[1, 1])# 選取一個向量的所有元素 print(vector[:])# 選取從0開始一直到第3個(包含第3個)元素 print(vector[:3])# 選取第3個元素之后的全部元素 print(vector[3:])# 選取最后一個元素 print(vector[-1])# 選取矩陣的第1行和第2行以及所有列 print(matrix_vector[:2, :])# 選取所有行以及第2列 print(matrix_vector[:, 1:2])# 選取所有行以及第2列并轉換成一個新的行向量 print(matrix_vector[:, 1])# 創建新的矩陣 matrix3 = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])# 查看行數和列數 print(matrix3.shape)# 查看元素數量 print(matrix3.size)# 查看維數 print(matrix3.ndim)# 下面使用的矩陣是matrix_vector # 創建一個匿名函數,返回輸入值加上100以后的值 add_100 = lambda i: i+100# 創建向量轉化函數 vectorized_add_100 = np.vectorize(add_100)# 對矩陣的所有元素應用這個函數 print(vectorized_add_100(matrix_vector))# 用后矩陣本身不變 print(matrix_vector)# 連續使用 print(vectorized_add_100(vectorized_add_100(matrix_vector)))# 返回最大的元素 print(np.max(matrix_vector))# 返回最小元素 print(np.min(matrix_vector))# 找到每一列的最大元素 print(np.max(matrix_vector, axis=0))# 找到每一行最大的元素 print(np.max(matrix_vector, axis=1))# 返回平均值 print(np.mean(matrix_vector))# 返回方差 print(np.var(matrix_vector))# 返回標準差 print(np.std(matrix_vector))# 求每一列的平均值 print(np.mean(matrix_vector, axis=0))# 求每一行的方差 print(np.var(matrix_vector, axis=1))# 將matrix3矩陣變為2×6矩陣 matrix4 = matrix3.reshape(2, 6) print(matrix4)# 上面的變形要求前后元素個數相同,且不會改變元素個數 print(matrix4.size)# reshape時傳入參數-1意味著可以根據需要填充元素 print(matrix3.reshape(1, -1))# reshape如果提供一個整數,那么reshape會返回一個長度為該整數值的一維數組 print(matrix3.reshape(12))# 轉置matrix_vector矩陣 print(matrix_vector.T)# 嚴格地講,向量是不能被轉置的 print(vector.T)# 轉置向量通常指二維數組表示形式下將行向量轉換為列向量或者反向轉換 print(np.array([[1, 2, 3, 4, 5, 6]]).T)# 將matrix_vector矩陣展開 print(matrix_vector.flatten())# 將矩陣展開的另一種策略是利用reshape創建一個行向量 print(matrix_vector.reshape(1, -1))# 創建用于求秩的新矩陣 matrix5 = np.array([[1, 1, 1], [1, 1, 10], [1, 1, 15]])# 計算矩陣matrix5的秩 print(np.linalg.matrix_rank(matrix5))# 創建用于行列式求解的新矩陣 matrix6 = np.array([[1, 2, 3], [2, 4, 6], [3, 8, 9]])# 求解矩陣matrix6的行列式 print(np.linalg.det(matrix6))# 返回矩陣的對角線元素 print(matrix6.diagonal())# 返回主對角線向上偏移量為1的對角線元素 print(matrix6.diagonal(offset=1))# 返回主對角線向下偏移量為1的對角線元素 print(matrix6.diagonal(offset=-1))# 返回矩陣的跡 print(matrix6.trace())# 求跡的另外的方法(返回對角線元素并求和) print(sum(matrix6.diagonal()))# 創建一個求解特征值、特征向量的矩陣 matrix7 = np.array([[1, -1, 3], [1, 1, 6], [3, 8, 9]])# 計算特征值和特征向量 eigenvalues, eigenvectors = np.linalg.eig(matrix7)# 查看特征值 print(eigenvalues)# 查看特征向量 print(eigenvectors)# 構造兩個點積(數量積)所需向量 vector_a = np.array([1, 2, 3]) vector_b = np.array([4, 5, 6])# 計算點積 print(np.dot(vector_a, vector_b))# Python 3.5+ 版本可以這樣求解點積 print(vector_a @ vector_b)# 構造兩個可用于加減的矩陣 matrix_a = np.array([[1, 1, 1], [1, 1, 1], [1, 1, 2]]) matrix_b = np.array([[1, 3, 1], [1, 3, 1], [1, 3, 8]])# 兩矩陣相加 print(np.add(matrix_a, matrix_b))# 兩矩陣相減 print(np.subtract(matrix_a, matrix_b))# 直接用+/-也可以做矩陣加減 print(matrix_a + matrix_b) print(matrix_a - matrix_b)# 構造兩個可用于乘法的小矩陣 matrix_c = np.array([[1, 1], [1, 2]]) matrix_d = np.array([[1, 3], [1, 2]])# 兩矩陣相乘 print(np.dot(matrix_c, matrix_d))# Python 3.5+ 版本可以這樣求解矩陣乘法 print(matrix_c @ matrix_d)# 我們也可以把兩矩陣對應元素相乘,而非矩陣乘法 print(matrix_c * matrix_d)# 創建一個用于求逆的矩陣 matrix8 = np.array([[1, 4], [2, 5]])# 計算矩陣的逆 print(np.linalg.inv(matrix8))# 驗證一個矩陣和它的逆矩陣相乘等于I(單位矩陣) print(matrix8 @ np.linalg.inv(matrix8))測試結果:
(2, 0) 3(1, 1) 1(1, 1) 1(2, 0) 3 3 5 [1 2 3 4 5 6] [1 2 3] [4 5 6] 6 [[1 2 3][4 5 6]] [[2][5][8]] [2 5 8] (3, 4) 12 2 [[101 102 103][104 105 106][107 108 109]] [[1 2 3][4 5 6][7 8 9]] [[201 202 203][204 205 206][207 208 209]] 9 1 [7 8 9] [3 6 9] 5.0 6.666666666666667 2.581988897471611 [4. 5. 6.] [0.66666667 0.66666667 0.66666667] [[ 1 2 3 4 5 6][ 7 8 9 10 11 12]] 12 [[ 1 2 3 4 5 6 7 8 9 10 11 12]] [ 1 2 3 4 5 6 7 8 9 10 11 12] [[1 4 7][2 5 8][3 6 9]] [1 2 3 4 5 6] [[1][2][3][4][5][6]] [1 2 3 4 5 6 7 8 9] [[1 2 3 4 5 6 7 8 9]] 2 0.0 [1 4 9] [2 6] [2 8] 14 14 [13.55075847 0.74003145 -3.29078992] [[-0.17622017 -0.96677403 -0.53373322][-0.435951 0.2053623 -0.64324848][-0.88254925 0.15223105 0.54896288]] 32 32 [[ 2 4 2][ 2 4 2][ 2 4 10]] [[ 0 -2 0][ 0 -2 0][ 0 -2 -6]] [[ 2 4 2][ 2 4 2][ 2 4 10]] [[ 0 -2 0][ 0 -2 0][ 0 -2 -6]] [[2 5][3 7]] [[2 5][3 7]] [[1 3][1 4]] [[-1.66666667 1.33333333][ 0.66666667 -0.33333333]] [[1.00000000e+00 0.00000000e+00][1.11022302e-16 1.00000000e+00]]總結
以上是生活随笔為你收集整理的【Python】Numpy中对向量、矩阵的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Python】Python一些有趣而基
- 下一篇: 巧用记忆化搜索代替暴力递归(洛谷P146