您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關怎么在Numpy中使用向量和矩陣,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
歸納一下,下面的代碼主要做了這些事:
創建一個向量
創建一個矩陣
創建一個稀疏矩陣
選擇元素
展示一個矩陣的屬性
對多個元素同時應用某種操作
找到最大值和最小值
計算平均值、方差和標準差
矩陣變形
轉置向量或矩陣
展開一個矩陣
計算矩陣的秩
計算行列式
獲取矩陣的對角線元素
計算矩陣的跡
計算特征值和特征向量
計算點積
矩陣的相加相減
矩陣的乘法
計算矩陣的逆
一起來看代碼吧:
# 加載numpy庫 import numpy as np from 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]]
關于怎么在Numpy中使用向量和矩陣就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。