zoukankan      html  css  js  c++  java
  • 对角矩阵、单位矩阵

    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("-----
    ")
    
    
    
    '''
    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("-----
    ")
    
    #k=1表示对角线的位置上移1个对角线
    c = np.triu(a,1)
    print(c)
    '''
    [[0 2 3]
     [0 0 6]
     [0 0 0]]
    '''
    print("-----
    ")
    
    #k=-1表示对角线的位置下移1个对角线
    d = np.triu(a,-1)
    print(d)
    '''
    [[1 2 3]
     [4 5 6]
     [0 8 9]]
    '''
    print("-----
    ")
    
    
    '''   ------------------------------- 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("-----
    ")
    
    #k=1表示对角线的位置上移1个对角线
    e = np.tril(a,1)
    print(e)
    '''
    [[1 2 0]
     [4 5 6]
     [7 8 9]]
    '''
    print("-----
    ")
    
    #k=-1表示对角线的位置下移1个对角线
    g = np.tril(a,-1)
    print(g)
    '''
    [[0 0 0]
     [4 0 0]
     [7 8 0]]
    '''
    print("-----
    ")
    
    
    
    '''   -------------------------------------对角线--------------------------'''
    '''
    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("-----
    ")
    
    
    '''
    使用一次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("-----
    ")
    
    
    #k=1表示对角线的位置上移1个对角线
    i = np.diag(a, k=1)
    print(i)
    #[2 6]
    print(i.__class__)
    #<class 'numpy.ndarray'>
    print("-----
    ")
    
    
    #k=-1表示对角线的位置下移1个对角线
    j = np.diag(a, k=-1)
    print(j)
    #[4 8]
    print("-----
    ")
    
    
    '''
    使用两次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("-----
    ")
    
    
    '''
        一维数组
    '''
    #一维数组将数组中的每个元素作为对角线上元素形成二维数组;
    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("-----
    ")
    
    l2 = np.diag(l1)
    print(l2)
    #[1 2 3 4]
    print("-----
    ")
    
    
    m1 = np.tril(a, k=0)
    print(m1)
    '''
    [[1 0 0]
     [4 5 0]
     [7 8 9]]
    '''
    print("-----
    ")
    
    m2 = np.tril(a, k=1)
    print(m2)
    '''
    [[1 2 0]
     [4 5 6]
     [7 8 9]]
    '''
    print("-----
    ")
    
    m3 = np.tril(a, k=-1)
    print(m3)
    '''
    [[0 0 0]
     [4 0 0]
     [7 8 0]]
    '''
    print("-----
    ")
    
    m4 = m1-m2
    print(m4)
    '''
    [[ 0 -2  0]
     [ 0  0 -6]
     [ 0  0  0]]
    '''
    print("-----
    ")
    
    '''
    正常的下三角减去下三角
    '''
    m = m1 - m3
    print(m)
    '''
    [[1 0 0]
     [0 5 0]
     [0 0 9]]
    '''
    print("-----
    ")
    
    
    
    '''--------------------------------------单位矩阵----------------------------'''
    '''
    创建单位矩阵借助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 = np.identity(3)
    print(n)
    '''
    [[1. 0. 0.]
     [0. 1. 0.]
     [0. 0. 1.]]
    '''

     

     

  • 相关阅读:
    oracle 例外
    Help with Intervals(集合的交并补,线段树)
    Mex(线段树的巧妙应用)
    hdu4578Transformation(线段树多个lz标记)
    Coder(线段树)
    Ice-cream Tycoon9(线段树)
    Partition(线段树的离线处理)
    ACM学习大纲(转)
    Codeforces Round #250 (Div. 1)
    记次浙大月赛 134
  • 原文地址:https://www.cnblogs.com/sjslove/p/14256440.html
Copyright © 2011-2022 走看看