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

  

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

原文地址:https://www.cnblogs.com/yuxiangyang/p/11168436.html