博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
numpy之矩阵
阅读量:5023 次
发布时间:2019-06-12

本文共 2417 字,大约阅读时间需要 8 分钟。

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

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

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

 

三、矩阵的逆

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

      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# 方法1prices = 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('-----------')# 方法2persons = prices.I * totalsprint(persons)输出结果:[[16.] [22.]][[16.] [22.]]-----------[[16.] [22.]]

 

 

  

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

转载于:https://www.cnblogs.com/yuxiangyang/p/11168436.html

你可能感兴趣的文章
PAT甲级1002 链表实现方法
查看>>
查看Linux信息
查看>>
Python中sys模块sys.argv取值并判断
查看>>
【详记MySql问题大全集】四、设置MySql大小写敏感(踩坑血泪史)
查看>>
并查集
查看>>
ubuntu 11.04下android开发环境的搭建!
查看>>
Bzoj 3343: 教主的魔法
查看>>
括号序列(栈)
查看>>
一件趣事
查看>>
DevExpress控件TExtLookupComboBox实现多列模糊匹配输入的方法
查看>>
atom 调用g++编译cpp文件
查看>>
H3C HDLC协议特点
查看>>
iptables 网址转译 (Network address translation,NAT)
查看>>
ios __block typeof 编译错误解决
查看>>
android 插件形式运行未安装apk
查看>>
ios开发之 manage the concurrency with NSOperation
查看>>
Android权限 uses-permission
查看>>
NSEnumerator用法小结
查看>>
vim如何配置go语言环境
查看>>
机器学习好网站
查看>>