對角矩陣、單位矩陣


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.]]
'''

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM