本文摘自《用Python做科学计算》,版权归原作者所有。

接下来介绍矩阵运算

Numpy默认不使用矩阵运算,如果希望对数组进行矩阵运算的话需要调用相应的函数

matrix 对象

numpy库提供了matrix类,使用matrix类创建的是矩阵对象,它们的加减乘除运算缺省采用矩阵方式计算,因此用法和matlab十分类似。但是由于NumPy中同时存在ndarray和matrix对象,因此用户很容易将两者弄混。这有违Python的“显式优于隐式”的原则,因此并不推荐在较复杂的程序中使用matrix。下面是使用matrix的一个例子:

1 >>> importnumpy as np2 >>> a = np.matrix([[1,2,3],[5,5,6],[7,9,9]])3 >>> a**-1 #a 的逆矩阵

4 matrix([[-0.6 , 0.6 , -0.2],5 [-0.2 , -0.8 , 0.6],6 [ 0.66666667, 0.33333333, -0.33333333]])7 >>> a * a**-1 #a与a的逆矩阵的乘积,结果是单位阵

8 matrix([[ 1.00000000e+00, 0.00000000e+00, 0.00000000e+00],9 [ 4.44089210e-16, 1.00000000e+00, 4.44089210e-16],10 [ 0.00000000e+00, -4.44089210e-16, 1.00000000e+00]])

如果不使用matrix 对象,而把二维数组看作是矩阵的话,就需要使用dot函数进行计算。对于二维数组,它计算的是矩阵乘积,对于一维数组,它计算的是其点积。当需要将一维数组当作列矢量或者行矢量进行矩阵运算时,推荐先使用reshape或者shape函数将一维数组转换为二维数组:

1 >>> a = np.array([1, 2, 3])2 >>> a.shape#a是一维数组

3 (3,)4 >>> a.shape = (-1, 1)#使用shape直接修改a的维数

5 >>>a6 array([[1],7 [2],8 [3]])9 >>> a.reshape(1, -1) #使用reshape也可以,但是他的返回值改变a的shape,而a本身不变

10 array([[1, 2, 3]])11 >>>a12 array([[1],13 [2],14 [3]])

dot :对于两个一维的数组,计算的是这两个数组对应下标元素的乘积和(数学上称之为内积);对于二维数组,计算的是两个数组的矩阵乘积;对于多维数组,它的通用计算公式如下,即结果数组中的每个元素都是:数组a的最后一维上的所有元素与数组b的倒数第二位上的所有元素的乘积和:

dot(a, b)[i,j,k,m] = sum(a[i,j,:] * b[k,:,m])

两个三维数组相乘

1 >>> a = np.arange(12).reshape(2,3,2)2 >>>a3 array([[[ 0, 1],4 [ 2, 3],5 [ 4, 5]],6

7 [[ 6, 7],8 [ 8, 9],9 [10, 11]]])10 >>> b = np.arange(12,24).reshape(2,2,3)11 >>>b12 array([[[12, 13, 14],13 [15, 16, 17]],14

15 [[18, 19, 20],16 [21, 22, 23]]])17 >>> c =np.dot(a,b)18 >>>c19 array([[[[ 15, 16, 17],20 [ 21, 22, 23]],21

22 [[ 69, 74, 79],23 [ 99, 104, 109]],24

25 [[123, 132, 141],26 [177, 186, 195]]],27

28

29 [[[177, 190, 203],30 [255, 268, 281]],31

32 [[231, 248, 265],33 [333, 350, 367]],34

35 [[285, 306, 327],36 [411, 432, 453]]]])37 >>>c.shape38 (2, 3, 2, 3)

dot乘积的结果c可以看做是数组a, b的多个子矩阵的乘积:

1 >>> np.alltrue( c[0,:,0,:] ==np.dot(a[0],b[0]) )2 True3 >>> np.alltrue( c[1,:,0,:] == np.dot(a[1],b[0]) )4 True5 >>> np.alltrue( c[0,:,1,:] == np.dot(a[0],b[1]) )6 True7 >>> np.alltrue( c[1,:,1,:] == np.dot(a[1],b[1]) )8 True

inner : 和dot乘积一样,对于两个一维数组,计算的是这两个数组对应下标元素的乘积和;对于多维数组,它计算的结果数组中的每个元素都是:数组a和b的最后一维的内积,因此数组a和b的最后一维的长度必须相同:

1 inner(a, b)[i,j,k,m] = sum(a[i,j,:]*b[k,m,:])

1 >>> a = np.arange(12).reshape(2,3,2)2 >>> b = np.arange(12,24).reshape(2,3,2)3 >>> c =np.inner(a,b)4 >>>c.shape5 (2, 3, 2, 3)6 >>> c[0,0,0,0] ==np.inner(a[0,0],b[0,0])7 True8 >>> c[0,1,1,0] == np.inner(a[0,1],b[1,0])9 True10 >>> c[1,2,1,2] == np.inner(a[1,2],b[1,2])11 True

outer : 只按照一维数组进行计算,如果传入参数是多维数组,则先将此数组展平为一维数组之后再进行运算。outer乘积计算的列向量和行向量的矩阵乘积:

1 >>> np.outer([1,2,3],[4,5,6,7])2 array([[ 4, 5, 6, 7],3 [ 8, 10, 12, 14],4 [12, 15, 18, 21]])

矩阵中更高级的一些运算可以在NumPy的线性代数子库linalg中找到。例如inv函数计算逆矩阵,solve函数可以求解多元一次方程组。下面是solve函数的一个例子:

1 >>> a = np.random.rand(10,10)2 >>> b = np.random.rand(10)3 >>> x = np.linalg.solve(a,b)

solve函数有两个参数a和b。a是一个N*N的二维数组,而b是一个长度为N的一维数组,solve函数找到一个长度为N的一维数组x,使得a和x的矩阵乘积正好等于b,数组x就是多元一次方程组的解。

python计算在月球的体重_NumPy-快速处理数据--矩阵运算相关推荐

  1. python计算在月球的体重程序_# Python程序语言设计基础(第二版)程序练习题

    Python程序语言设计基础(第二版)程序练习题 3.1 重量计算,月球上物体的体重是在地球上的16.5%,假如你在地球上每年增长0.5kg,编写程序输出未来10年你在地球和月球上的体重状况. cur ...

  2. python计算在月球的体重_一个120斤的宇航员到了月球后,他的体重会变多重?

    引言:月球是距离地球最近的一颗星球,因此人类最早对它进行探索.在美国人成功登陆月球之后,世界掀起了一股探索月球的热潮.在众多的探索之下,人类逐渐揭开月球的面纱,原来它是一颗贫瘠的星球,但也和地球一样存 ...

  3. python计算学生年龄_用pandas快速统计学生年龄班级等分组信息

    最近收到一个求助邮件,他的需求如下: 我是小学的一名统计员,因长期做统计工作,近期,自学一点python,但如何把excel中的8位数出生日期转成年龄,一直做不好,现请您帮忙一下,不知能否帮! 这个问 ...

  4. python计算运动会某个参赛选手的得分。数据保存在文件中_Python基础教程之第二章---变量和字符串(1) 搬运...

    Python变量及其使用 无论使用什么语言编程,其最终目的都是对数据进行处理.程序在编程过程中,为了处理数据更加方便,通常会将其存储在变量中. 形象地看,变量就像一个个小容器,用于"盛装&q ...

  5. python计算运动会某个参赛选手的得分。数据保存在文件中_成绩计算电脑程序的使用说明...

    成绩计算电脑程序的使用说明 为了计算成绩,特制作这个电脑程序,说明如下: 一.开发软件:Python 二.使用说明: 在电脑D盘根目录下建立两个excel文件,一个是1.xlsx,另一个是2.xlsx ...

  6. python计算运动会某个参赛选手的得分。数据保存在文件中_为什么一定要考计算机二级证书?8个好处,考和没考区别有点大...

    戳上面的蓝字关注我们哦! 商务合作加V/QQ:55838408 在众多考试中,全国计算机等级考试可以说是相对热门也最基础的考试.然而就是这最基础的考试,很多人都还没有通过.关于计算机等级考试,你又知道 ...

  7. python计算对数收益率_R语言金融基础:tidyquant数据整理(算术/对数收益率)

    作者:黄天元,复旦大学博士在读,热爱数据科学与开源工具(R/Python),致力于利用数据科学迅速积累行业经验优势和科学知识发现,涉猎内容包括但不限于信息计量.机器学习.数据可视化.应用统计建模.知识 ...

  8. 利用Python计算UDP校验和

    UDP 检验和提供了差错检测的功能.这是基于端到端原则实现的.但是 UDP 的检验和并不提供差错回复的能力. 一.UDP结构 二.UDP校验和计算方法  计算校验和的过程很关键,主要分为以下几个步骤: ...

  9. Python快速编程入门#学习笔记02# |第十章 :Python计算生态与常用库(附.小猴子接香蕉、双人乒乓球小游戏源码)

    全文目录 学习目标 1. Python计算生态概述 1.1 Python计算生态概述 2. Python生态库的构建与发布 2.1 模块的构建与使用 * 2.1.1第三方库/模块导入的格式 2.2 包 ...

最新文章

  1. 挑战61年未被质疑的经典心理学理论—— 大脑识别图像并非“趣味导向”
  2. MobileNet-SSD
  3. Glide核心设计一:皮皮虾,我们走
  4. java如何将线程与cpu的核绑定_JVM(13)年轻代垃圾回收器ParNew是如何工作的?
  5. 信号完整性分析心得体会_「职场技能」这8个常用信号完整性的测试手段,你知道几个?...
  6. IP代理在网络游戏中的应用
  7. 02使用常规步骤编译NanoPiM1Plus的Android4.4.2
  8. 生成微信所有朋友合成的头像,来自网络GitHub,
  9. 【elasticsearch】The number of object passed must be even but was [1]
  10. effective C++ 条款 44:将与参数无关的代码抽离templates
  11. 天弘基金:中国的BlackRock?
  12. rgba通道转rgb,将RGBA颜色转换为RGB
  13. RNA-seq的典型流程(protocol)
  14. android 绑定布局,android – 在数据绑定中设置动态布局高度
  15. jquery 处理页面的事件详解
  16. C#chart绘折线图动态添加数据
  17. 阿里8年测试老鸟教你软件测试工程师简历,技术栈,项目经验怎么写
  18. javaee jsp实现留言板(eclipse+mysql),五个界面,留言、登陆、注册等
  19. 微型计算机原理-期末
  20. day11-函数作业

热门文章

  1. 关于注册表、组策略、设置灰色联想
  2. Mysql学习总结(13)——使用JDBC处理MySQL大数据
  3. 大型网站技术架构(三)架构核心要素
  4. java main 静态代码_java中没有main方法怎么怎么执行静态块中的内容
  5. python用户登陆,Python入门基础--用户登陆
  6. Mysql存时间不一致_node mysql 存在数据库中的时间和取到前端的时间不一致,请问怎么解决...
  7. html5有本地存储吗,HTML5的本地存储
  8. html绘制静态图表,怎样用JavaScript和HTML5 Canvas绘制图表
  9. 作为一个软件开发公司如何让自己的技术落地应用产生价值呢?
  10. 如何展开Linux Memory Management学习?