import numpy as np '''------------------------------------創建矩陣---------------------------''' ''' 創建矩陣 : 2維數組 ''' #a = np.mat("1,2,3;4,5,6;7,8,9") a1 = np.array([[1,2,3],[4,5,6],[7,8,9]]) #使用mat()將array形式轉換為矩陣 a = np.mat(a1) print(a) ''' [[1 2 3] [4 5 6] [7 8 9]] ''' print(a.__class__) #<class 'numpy.matrix'> print("-----\n") ''' tril和triu都是返回array形式 ''' ''' ------------------------------- triu()上三角矩陣 -------------------------''' ''' triu():提取矩陣上三角矩陣 (upper triangle of an array.) triu(m, k=0) m:表示一個矩陣 k:表示對角線的起始位置(k取值默認為0) ''' #k=0表示正常的上三角矩陣 b = np.triu(a,0) print(b) ''' [[1 2 3] [0 5 6] [0 0 9]] ''' print(b.__class__) #<class 'numpy.ndarray'> b1 = np.mat(b) print(b1.__class__) #<class 'numpy.matrix'> print("-----\n") #k=1表示對角線的位置上移1個對角線 c = np.triu(a,1) print(c) ''' [[0 2 3] [0 0 6] [0 0 0]] ''' print("-----\n") #k=-1表示對角線的位置下移1個對角線 d = np.triu(a,-1) print(d) ''' [[1 2 3] [4 5 6] [0 8 9]] ''' print("-----\n") ''' ------------------------------- tril()下三角矩陣 -------------------------''' ''' tril():提取矩陣下三角矩陣 (lower triangle of an array.) ''' #k=0表示正常的下三角矩陣 e = np.tril(a,0) print(e) ''' [[1 0 0] [4 5 0] [7 8 9]] ''' print(e.__class__) #<class 'numpy.ndarray'> e1 = np.mat(e) print(e1.__class__) print("-----\n") #k=1表示對角線的位置上移1個對角線 e = np.tril(a,1) print(e) ''' [[1 2 0] [4 5 6] [7 8 9]] ''' print("-----\n") #k=-1表示對角線的位置下移1個對角線 g = np.tril(a,-1) print(g) ''' [[0 0 0] [4 0 0] [7 8 0]] ''' print("-----\n") ''' -------------------------------------對角線--------------------------''' ''' diagonals:處理對角線函數 numpy.diag()返回一個矩陣的對角線元素 numpy.diag(v,k=0) 返回:以一維數組的形式返回方陣的對角線(或非對角線)元素 兩次使用:np.diag() 將數組類型轉化為矩陣:mat() ''' print(a) ''' [[1 2 3] [4 5 6] [7 8 9]] ''' print(a.__class__) #<class 'numpy.matrix'> print("-----\n") ''' 使用一次np.diag():二維數組提取出對角線上的元素返回一維數組 ''' #k=0 正常的對角線的位置 h = np.diag(a, k=0) print(h) #[1 5 9] #返回方陣的對角線元素 print(h.ndim) #1 print(h.__class__) #<class 'numpy.ndarray'> #將數組轉為矩陣形式 h1 = np.mat(h) print(h1.__class__) #<class 'numpy.matrix'> print("-----\n") #k=1表示對角線的位置上移1個對角線 i = np.diag(a, k=1) print(i) #[2 6] print(i.__class__) #<class 'numpy.ndarray'> print("-----\n") #k=-1表示對角線的位置下移1個對角線 j = np.diag(a, k=-1) print(j) #[4 8] print("-----\n") ''' 使用兩次np.diag() 獲得二維矩陣的對角矩陣 先將主對角線的元素提取出來,形成一維數組 再將一維數組中的每個元素作為主對角線上面的元素形成二維數組 ''' #np.diag(a):[1 5 9] k = np.diag(np.diag(a)) print(k) ''' [[1 0 0] [0 5 0] [0 0 9]] ''' #除對角線以外的元素均為零 print(k.ndim) #2 print("-----\n") ''' 一維數組 ''' #一維數組將數組中的每個元素作為對角線上元素形成二維數組; l = np.array([1,2,3,4]) l1 = np.diag(l) print(l1) ''' [[1 0 0 0] [0 2 0 0] [0 0 3 0] [0 0 0 4]] ''' print("-----\n") l2 = np.diag(l1) print(l2) #[1 2 3 4] print("-----\n") m1 = np.tril(a, k=0) print(m1) ''' [[1 0 0] [4 5 0] [7 8 9]] ''' print("-----\n") m2 = np.tril(a, k=1) print(m2) ''' [[1 2 0] [4 5 6] [7 8 9]] ''' print("-----\n") m3 = np.tril(a, k=-1) print(m3) ''' [[0 0 0] [4 0 0] [7 8 0]] ''' print("-----\n") m4 = m1-m2 print(m4) ''' [[ 0 -2 0] [ 0 0 -6] [ 0 0 0]] ''' print("-----\n") ''' 正常的下三角減去下三角 ''' m = m1 - m3 print(m) ''' [[1 0 0] [0 5 0] [0 0 9]] ''' print("-----\n") '''--------------------------------------單位矩陣----------------------------''' ''' 創建單位矩陣借助identity()函數 n*n的單位數組 返回數組類型 ''' help(np.identity) ''' identity(n, dtype=None) 接受的參數有兩個:第一個是n值大小,第二個為數據類型(默認float) out : ndarray `n` x `n` array with its main diagonal set to one, and all other elements 0. 主對角線元素為1,其他元素均為零 ''' print("-----\n") n = np.identity(3) print(n) ''' [[1. 0. 0.] [0. 1. 0.] [0. 0. 1.]] '''