multiply(a,b)就是个乘法,如果a,b是两个数组,那么对应元素相乘

numpy.multiply
numpy.multiply(x1, x2[, out]) = <ufunc 'multiply'>
Multiply arguments element-wise.
Parameters:
x1, x2 : array_like
Input arrays to be multiplied.
Returns:
y : ndarray
The product of x1 and x2, element-wise. Returns a scalar if
both  x1 and x2 are scalars.
Notes
Equivalent to x1 * x2 in terms of array broadcasting.
Examples
>>>
>>> np.multiply(2.0, 4.0)
8.0
>>>
>>> x1 = np.arange(9.0).reshape((3, 3))
>>> x2 = np.arange(3.0)
>>> np.multiply(x1, x2)
array([[  0.,   1.,   4.],
       [  0.,   4.,  10.],
       [  0.,   7.,  16.]])
为什么上面的np.multiply(x1, x2)是这种结果,原因是multiply是ufunc函数

当我们使用ufunc函数对两个数组进行计算时,ufunc函数会对这两个数组的对应元素进行计算,因此它要求这两个数组有相同的大小(shape相同)。如果两个数组的shape不同的话,会进行如下的广播(broadcasting)处理:

让所有输入数组都向其中shape最长的数组看齐,shape中不足的部分都通过在前面加1补齐
输出数组的shape是输入数组shape的各个轴上的最大值
如果输入数组的某个轴和输出数组的对应轴的长度相同或者其长度为1时,这个数组能够用来计算,否则出错
当输入数组的某个轴的长度为1时,沿着此轴运算时都用此轴上的第一组值
上述4条规则理解起来可能比较费劲,让我们来看一个实际的例子。

先创建一个二维数组a,其shape为(6,1):

>>> a = np.arange(0, 60, 10).reshape(-1, 1)
>>> a
array([[ 0], [10], [20], [30], [40], [50]])
>>> a.shape
(6, 1)

再创建一维数组b,其shape为(5,):

>>> b = np.arange(0, 5)
>>> b
array([0, 1, 2, 3, 4])
>>> b.shape
(5,)

计算a和b的和,得到一个加法表,它相当于计算a,b中所有元素组的和,得到一个shape为(6,5)的数组:

>>> c = a + b
>>> c
array([[ 0,  1,  2,  3,  4],
       [10, 11, 12, 13, 14],
       [20, 21, 22, 23, 24],
       [30, 31, 32, 33, 34],
       [40, 41, 42, 43, 44],
       [50, 51, 52, 53, 54]])
>>> c.shape
(6, 5)

由于a和b的shape长度(也就是ndim属性)不同,根据规则1,需要让b的shape向a对齐,于是将b的shape前面加1,补齐为(1,5)。相当于做了如下计算:

>>> b.shape=1,5
>>> b
array([[0, 1, 2, 3, 4]])

这样加法运算的两个输入数组的shape分别为(6,1)和(1,5),根据规则2,输出数组的各个轴的长度为输入数组各个轴上的长度的最大值,可知输出数组的shape为(6,5)。

由于b的第0轴上的长度为1,而a的第0轴上的长度为6,因此为了让它们在第0轴上能够相加,需要将b在第0轴上的长度扩展为6,这相当于:

>>> b = b.repeat(6,axis=0)
>>> b
array([[0, 1, 2, 3, 4],
       [0, 1, 2, 3, 4],
       [0, 1, 2, 3, 4],
       [0, 1, 2, 3, 4],
       [0, 1, 2, 3, 4],
       [0, 1, 2, 3, 4]])

由于a的第1轴的长度为1,而b的第一轴长度为5,因此为了让它们在第1轴上能够相加,需要将a在第1轴上的长度扩展为5,这相当于:

>>> a = a.repeat(5, axis=1)
>>> a
array([[ 0,  0,  0,  0,  0],
       [10, 10, 10, 10, 10],
       [20, 20, 20, 20, 20],
       [30, 30, 30, 30, 30],
       [40, 40, 40, 40, 40],
       [50, 50, 50, 50, 50]])

经过上述处理之后,a和b就可以按对应元素进行相加运算了。

当然,numpy在执行a+b运算时,其内部并不会真正将长度为1的轴用repeat函数进行扩展,如果这样做的话就太浪费空间了

这样,就能知道为什么 np.multiply(x1, x2) 是这种结果了

np.multiply函数的用法 ufunc broadcasting相关推荐

  1. 关于np.empty()函数的用法

    看名字np.empty(),以为创建一个空的多维数组,如 np.empty((4,5)) 但是实际结果返回: import numpy as np x=np.empty((4,5)) x 结果: ar ...

  2. python中multiply函数_python中numpy中的multiply、*、matul 的区别

    numpy中的multiply.*.matul 的区别 1.对于矩阵(matrix)而言,multiply是对应元素相乘,而 *  .np.matmul() 函数 与 np.dot()函数 相当于矩阵 ...

  3. python中multiply函数_python中numpy库内multiply()、dot()和 * 三种乘法运算的区别小计...

    首先,导入函数包: import numpy as np 1.np.multiply()函数: 数组:(点对点)对应位置元素相乘 矩阵:对应位置元素相乘 示例: A = np.array([[1,2] ...

  4. np.min()和np.argmin()函数用法

    np.min()函数用于返回列表中的最小值 np.argmin()函数用于返回一维列表最小值索引或多维列表展平之后的最小值索引 import numpy as np lst1=[1,100,56,78 ...

  5. np.piecewise函数用法

    np.piecewise函数的语法为: numpy.piecewise(x, condlist, funclist) 主要参数的含义: x: 表示要进行操作的对象 condlist: 表示要满足的条件 ...

  6. np.apply_along_axis函数用法

    函数原型: numpy.apply_along_axis(func1d, axis, arr, *args, **kwargs) 这个函数的各个参数的含义请大家自行查阅了解,这里只记录一下参数axis ...

  7. numpy中multiply函数怎么用

    multiply(a,b)就是个乘法,如果a,b是两个数组,那么对应元素相乘 numpy.multiplynumpy.multiply(x1, x2[, out]) = <ufunc 'mult ...

  8. python中where的用法_Python中where()函数的用法详解

    本文主要和大家介绍了详解Python中where()函数的用法,小编觉得挺不错的,现在分享给大家,也给大家做个参,希望能帮助到大家. where()的用法 首先强调一下,where()函数对于不同的输 ...

  9. Numpy中np.mashgri() 函数介绍及2种应用场景

    @[toc](Numpy中np.mashgri() 函数介绍及2种应用场景 文章目录:) 近期在好几个地方都看到meshgrid的使用,虽然之前也注意到meshgrid的用法. 但总觉得印象不深刻,不 ...

  10. 浅述numpy中argsort()函数的用法

    浅述python中argsort()函数的用法 由于想使用python用训练好的caffemodel来对很多图片进行批处理分类,学习过程中,碰到了argsort函数,因此去查了相关文献,也自己在pyt ...

最新文章

  1. 深入理解分布式技术 - 配置中心
  2. python如何小写p转换p_Python如何将字符串“p”从列表转换为变量值p
  3. 《软件》2011年第6期刊登出 《DB 查询分析器》中断SQL语句的执行
  4. Java-For循环
  5. 如何利用python将mp4文件转换为gif文件 + 代码分享 另附在线转换网址
  6. 网易云api接口_网易云音乐你喜欢吗?你自己也可以做一个
  7. python 爬虫(一) requests+BeautifulSoup 爬取简单网页代码示例
  8. PTA 判断上三角矩阵
  9. react axios封装
  10. 韦氏成人智力测试软件,(实例分析)韦氏成人智力测验(WAIS-RC)
  11. mybatis批量新增和修改
  12. maven 下载依赖源码
  13. IBM Cloud VPC网络与本地办公网络的互通
  14. matlab计算wsn覆盖率,WSN覆盖率求解
  15. 【bzoj4372】烁烁的游戏
  16. 计算机不能启动任务管理器,win10系统无法打开任务管理器怎么办
  17. 流媒体-H264协议-编码-x264学习-相关概念x264编译及文件解析(一)
  18. 鞋底php是什么材质,软底鞋是什么?软底鞋的鞋底是什么材质?
  19. 【尚硅谷HTML5】前端HTML代码笔记
  20. mysql迅_迅搜(xunsearch) - 开源免费中文全文搜索引擎|PHP全文检索|mysql全文检索|站内搜索...

热门文章

  1. 希望能多看几遍找到自己的影子
  2. MySQL经典50题
  3. 整理了适合新手的20个Python练手小程序
  4. PCB绘图要点QA汇总
  5. 加密狗通过USB SERVER远程连接
  6. Axure RP9快捷键
  7. kuangbin14数论解析
  8. Java 数据字典的实现
  9. linux ora03113,ora-03113 问题解决
  10. C语言按位取反~的简单理解