• numpy之矩阵


    ---恢复内容开始---

    一、矩阵的创建(三种方法)

    '''
        矩阵:其是numpy.matrix类型对象,该类继自ndarray,所以几乎所有针对ndarry数组的操作,对矩阵对象同样有效,
            作为子类,矩阵又集合了自身的特点做了必要的扩充,如:矩阵的乘法运算、求逆等
    '''
    import numpy as np
    
    # 创建矩阵
    ary = np.arange(1, 10).reshape(3, 3)
    print(ary, type(ary))
    # 方法1
    m = np.matrix(ary, copy=True)
    print(m, type(m))
    ary[0, 0] = 999
    print(m, type(m))
    print('-------------------')
    # 方法2
    m = np.mat('1 2 3;4 5 6;7 8 9')
    print(m)
    # 方法3:等价于np.matrix(ary,copy=False)--->矩阵数据与数组数据共享
    m = np.mat(ary)
    print(m)
    
    
    输出结果:
             [[1 2 3]
     [4 5 6]
     [7 8 9]] <class 'numpy.ndarray'>
    [[1 2 3]
     [4 5 6]
     [7 8 9]] <class 'numpy.matrix'>
    [[1 2 3]
     [4 5 6]
     [7 8 9]] <class 'numpy.matrix'>
    -------------------
    [[1 2 3]
     [4 5 6]
     [7 8 9]]
    [[999   2   3]
     [  4   5   6]
     [  7   8   9]]     

    二、矩阵的乘法运算----点积

      

    '''
        矩阵:其是numpy.matrix类型对象,该类继自ndarray,所以几乎所有针对ndarry数组的操作,对矩阵对象同样有效,
            作为子类,矩阵又集合了自身的特点做了必要的扩充,如:矩阵的乘法运算、求逆等
    '''
    import numpy as np
    
    # 创建矩阵
    ary = np.arange(1, 10).reshape(3, 3)
    print(ary, type(ary))
    # 方法1
    m = np.matrix(ary, copy=True)
    print(m)
    print('==================')
    # 矩阵的乘法运算
    print(m * m)
    a = np.arange(1, 4)
    # a = np.mat(a)
    b = np.arange(4, 7)
    # b = np.mat(b)
    print(a.dot(b), type(a.dot(b)))
    
    输出结果:
        [[1 2 3]
     [4 5 6]
     [7 8 9]] <class 'numpy.ndarray'>
    [[1 2 3]
     [4 5 6]
     [7 8 9]]
    ==================
    [[ 30  36  42]
     [ 66  81  96]
     [102 126 150]]
    32 <class 'numpy.int32'>

    三、矩阵的逆

      判断矩阵是否有逆矩阵方法:

          1>矩阵的行列式不等于零
          2>矩阵为满秩矩阵
          3>矩阵的合同标准型是单位矩阵

    '''
        矩阵求逆
    '''
    import numpy as np
    
    # 创建矩阵
    b = np.mat('4 6 7;2 3 7;8 4 2')
    # 求矩阵的逆
    print(b)
    print(b.I)
    print(b * b.I)
    print(np.linalg.inv(b))
    
    输出结果:
    
    [[4 6 7]
     [2 3 7]
     [8 4 2]]
    [[-0.19642857  0.14285714  0.1875    ]
     [ 0.46428571 -0.42857143 -0.125     ]
     [-0.14285714  0.28571429  0.        ]]
    [[ 1.00000000e+00 -1.11022302e-16  0.00000000e+00]
     [ 5.55111512e-17  1.00000000e+00  0.00000000e+00]
     [-1.11022302e-16  0.00000000e+00  1.00000000e+00]]
    [[-0.19642857  0.14285714  0.1875    ]
     [ 0.46428571 -0.42857143 -0.125     ]
     [-0.14285714  0.28571429  0.        ]]

    四、示例

      

    '''
        矩阵求解案例:假设学校旅游,去程小孩票价3元,家长3.2元,共花了118.4元;
        回来时小孩票价3.5元,家长票价3.6元,共花了135.2元,求小孩和家长的人数
    '''
    import numpy as np
    
    # 方法1
    prices = np.mat('3 3.2;3.5 3.6')
    totals = np.mat('118.4;135.2')
    x = np.linalg.lstsq(prices, totals, rcond=-1)[0]        # 最优解(有解的话,给出精确解,没有的话,给出损失函数最小的解)
    print(x)
    x = np.linalg.solve(prices, totals)     # 精确解(如果有解的话,给出精确值,没有报错)
    print(x)
    
    print('-----------')
    
    # 方法2
    persons = prices.I * totals
    print(persons)
    
    
    
    输出结果:
    [[16.]
     [22.]]
    [[16.]
     [22.]]
    -----------
    [[16.]
     [22.]]

      

    ---恢复内容结束---

  • 相关阅读:
    如何更好地谋生,从事嵌入式软件开发五年的感悟和职业焦虑
    在url中使用friendly_id
    关于盒模型的一个CSS3样式
    配置discourse的相关资料
    关于手机端触摸样式
    这样阻止事件冒泡
    paypal中使用循环付款的问题
    封装事件的添加和移除状态
    input 标签在做动画时的bug
    模拟了个iphone上面的select框 需要下载iscroll
  • 原文地址:https://www.cnblogs.com/yuxiangyang/p/11168436.html
Copyright © 2020-2023  润新知