矩阵乘法

numpy当中常用的矩阵乘法有两种,numpy.dot和numpy.matmul 
当对象是2D矩阵的时候,这两个函数都是进行最正常的矩阵乘法

import numpy as npa = np.array( [ [ 1,2 ], [ 3,4 ] ] )
b = np.array( [ [ 1,2 ], [ 3,4 ] ] )c = np.matmul( a,b )
d = np.dot(a,b)
print c
print d
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

结果是一样的

矩阵元素对元素的乘法

也就是常说的elementwise,需要两个矩阵的大小一样(如果不考虑broadcast的话),multiply函数将两个矩阵相同位置的元素分别相乘,或者直接使用*

import numpy as npa = np.array( [ [ 1,2 ], [ 3,4 ] ] )
b = np.array( [ [ 1,2 ], [ 3,4 ] ] )c = np.multiply( a,b )
d = a * b
print c
print d
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

传播

如果两个矩阵(或者一个矩阵和一个标量)大小是不符合要求的话(比如大小不一样或者行和列的个数不满足要求),是不能进行运算的。但是在一定的规则下,numpy可以帮你进行broadcast。虽然我一开始对这种特性不以为然,但是后来发现,它对写vectorized的代码是非常有帮助的,而且往往计算效率会更高(因为所谓broadcast只是概念上的,真正运算的时候不会真占用那么多的空间)

当我们说一个标量或者向量要进行broadcast的时候,一定是指进行elementwise的操作,不会进行像矩阵乘法这样的操作

broadcast的原则是这样的,我们设两个向量A,B

A是一个 q * e * t的向量 
B是一个 u * y * l的向量 
那么这两个向量进行运算的时候 
1. 要么某个维度上大小相等,比如q==u 
2. 要么其中一个等于1 
当等于1的时候,就会在那个方向上进行broadcast

import numpy as npa = np.array( [ [ 1,2 ], [ 3,4 ] ] )
b = np.array( [ [ 1,2 ], [ 3,4 ] ] )c = 3.0
d = 2.0
rst = a + c
rst1 = b * d
print rst
print rst1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

在这个例子当中a是2 * 2的,c和d是1 * 1的,那么c就会在两个维度上broadcast,然后elementwise进行相加

import numpy as npa = np.array( [ [ 1,2 ], [ 3,4 ], [5,6] ] )
b = np.array( [ [2], [1], [3] ] )
print b.shaperst = a + bprint rst
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

在这个例子里面,a是3 * 2的, b是3 * 1的,那么b就会在axis=1这个维度上进行broadcast,然后相加

我们通常用到的例子还有,对于一个100 * 100 * 3的像素,如果要分别对rgb通道分别乘以一个scale的值,只需要对整张图片乘以一个 (3,)的向量,numpy就会自动处理成对每个点的三个通道分别操作

import numpy as npa = np.array( [ [[ 1,2,3 ], [ 3,4,5 ], [5,6,7] ],[[1, 2, 3], [3, 4, 5], [5, 6, 7]],[[1, 2, 3], [3, 4, 5], [5, 6, 7]],[[1, 2, 3], [3, 4, 5], [5, 6, 7]]] )
b = np.array( [1,2,3] )rst = a * bprint rst
原文:http://blog.csdn.net/supercally/article/details/54236532

numpy基本矩阵操作相关推荐

  1. python之numpy基础_Python知识普及:Numpy基础操作

    原标题:Python知识普及:Numpy基础操作 Numpy基础数据结构 创建数组 Numpy通用函数 import numpy as np # reshape 改变数组维度形状 ar1 = np.a ...

  2. python中numpy矩阵运算操作大全(非常全)!

    python中numpy矩阵运算操作大全(非常全) //2019.07.10晚 python矩阵运算大全 1.矩阵的输出形式: 对于任何一个矩阵,python输出的模板是: import numpy ...

  3. python numpy常用操作、Numpy 多维数组、矩阵相乘、矩阵乘以向量

    python numpy常用操作 Numpy基本操作 # 导入numpy import numpy as np # 生成numpy数组 x = np.array([1.0, 2.0, 3.0]) pr ...

  4. NumPy基础操作(1)

    NumPy基础操作(1) (注:记得在文件开头导入import numpy as np) 目录: 数组的创建 强制类型转换与切片 布尔型索引 结语 数组的创建 相关函数 np.array(), np. ...

  5. Python之Numpy常用操作

    Numpy常用操作 文章目录 Numpy常用操作 1.数组初始化 2.数组基本运算 3.多维数组组合 4.数组中查找最大/小索引 5.查找符合条件元素索引 6.更改数组维度 1.数组初始化 # 生成特 ...

  6. OpenCV的基本矩阵操作与示例

    转载:http://blog.csdn.net/iracer/article/details/51296631 OpenCV的基本矩阵操作与示例 OpenCV中的矩阵操作非常重要,本文总结了矩阵的创建 ...

  7. python学习——numpy基础操作

    numpy 基础操作 1 创建数组 2 数组常用属性和函数 3 数组元素增删 4 元素查找 5 数学运算 6 数组切片 1 创建数组 import numpy as np #以后numpy简写为np ...

  8. MATLAB与Python numpy矩阵操作对应表

    背景 NumPy和Matlab不一样,对于多维数组的运算,缺省情况下并不使用矩阵运算,可以调用相应的函数对数组进行矩阵运算.或者使用numpy库提供了的matrix类,用matrix类创建的是矩阵对象 ...

  9. [笔记]NumPy基础操作

    学机器学习做点小笔记,都是Python的NumPy库的基本小操作,图书馆借的书看到的,怕自己还了书后忘了,就记下来. 一般习惯导入numpy时使用 import numpy as np ,不要直接im ...

最新文章

  1. JDBC连接mysql数据的7个步骤(讲解+源码)
  2. python语法手册chm-python3.5.2官方帮助文档 参考手册(CHM版)
  3. 放弃中国国籍 却赚着中国人的钱
  4. TOPSIS(逼近理想解)算法原理详解与代码实现
  5. pdf python 位置_如何使用PDFMiner获取PDF中文本的位置?
  6. App Class Loader
  7. nginx 正则 结尾 配置_nginx正则配置解释多用于伪静态规则
  8. 【Elasticsearch】十九种Elasticsearch字符串搜索方式终极介绍 各种 查询
  9. 物联网技术引发第三次信息产业浪潮
  10. C++程序代码:利用【函数】——画正三角形、倒三角形
  11. 配置ANDROID开发环境的方法
  12. python dateutil_安装python dateutil
  13. ubuntu终端英文乱码问题
  14. 【网安入门】学习笔记(一)
  15. 思维导图(二):绘制规则
  16. 神舟战神 8/9 代同方机型黑苹果 (非本人原创) (本人已按照教程安装)
  17. iphone11信号强度测试软件,信号差的bug过不去了?来看看iPhone 12 Pro的实际信号测试...
  18. 移动数据不如移动计算?
  19. 工资计算系统数据流图绘制
  20. Linux下Socket网络编程之点对点聊天室

热门文章

  1. C Implement a string class with basic functionality
  2. leetcode221 Maximal Square
  3. html标签在html页面正常显示而不被解析
  4. openapi开放平台架构_适用于所有人的MicroProfile OpenAPI
  5. jvm优化_使用Java流和In-JVM-Memory的超低延迟查询
  6. 达特茅斯计算机专业师资力量如何,达特茅斯学院计算机科学computer science专业排名第126~150名(2020THE泰晤士高等教育世界大学排名)...
  7. ubuntu没有interfaces文件_Samba共享Ubuntu文件到Windows中
  8. 皮一皮:现在知道公司老说信息完整的重要性...
  9. 你一定需要知道的高阶JAVA枚举特性!
  10. 面试:说说你对“零拷贝”的理解?