关于Python中两个不同shape的数组间运算规则

 更新时间:2023年08月24日 08:48:15   作者:little_fat_sheep  
这篇文章主要介绍了关于Python中两个不同shape的数组间运算规则,众所周知,相同 shape 的两个数组间运算是指两个数组的对应元素相加,我们经常会碰到一些不同 shape 的数组间运算,需要的朋友可以参考下

1 数组间运算

声明:本博客讨论的数组间运算是指四则运算,如:a+b、a-b、a*b、a/b,不包括 a.dot(b) 等运算,由于 numpy 和 tensorflow 中都遵循相同的规则,本博客以 numpy 为例。

众所周知,相同 shape 的两个数组间运算是指两个数组的对应元素相加。我们经常会碰到一些不同 shape 的数组间运算。

那么,任何两个不同 shape 的数组都能运算么?又遵循什么样的运算规则?

shape 与维数:

如 a:[1,2,3],则 shape=(3, ),维数为1;b:[[1,2,3],[4,5,6]],则shape=(2,3),维数为2

运算条件:

设a为低维数组,b为高维数组,则a和b能运算的充分条件是:a.shape[-1]=b.shape[-1]、a.shape[-2]= b.shape[-2]、...(a可以作为b的一个元素),或者 a.shape=(m,1)(或a.shape=(m, )) 且b.shape=(1,n) (a为行向量,b为列向量)

运算规则:

  • 当a为数字时,将a与b的每个元素运算,运算后的 shape 与b相同当
  • a可以作为b的一个元素,将a与b中每个相同 shape 的子元素运算,运算后的 shape 与b相同
  • 当a为行向量b为列向量时,将a中每个元素与b中每个元素分别运算,运算后的 shape=(a.shape[1], b.shape[0])

如需改变数组 shape,可调用 reshape() 函数,如下:

a=np.array([[1,1],[2,2],[3,3]])
b=a.reshape([-1,1]) #a.shape=(3,2),b.shape=(6,1)

2 实验

数组与数字之间的运算

a=np.array([1,1,1])
b=np.array([[1,1,1],[2,2,2]])
c=a+1
d=b+1
print("c=a+1\n",c)
print("d=b+1\n",d)

输出
c=a+1
 [2 2 2]
d=b+1
 [[2 2 2]
 [3 3 3]]

补充:shape=(1, ) 的数组可以与任意 shape 的数组运算,运算规则同数字与数组的运算。

行向量与列向量之间的运算

a=np.array([[1,2,3]]) #或 a=np.array([1,2,3])
b=np.array([[1],[2],[3],[4],[5]])
c=a+b
print("c=a+b",c)

输出
c=a+b
[[2 3 4]
 [3 4 5]
 [4 5 6]
 [5 6 7]
 [6 7 8]]

1维数组与高维数组之间的运算

a=np.array([1,1,1])
b=np.array([[1,1,1],[2,2,2]])
c=np.array([[1,1,1],[2,2,2],[3,3,3]])
d=a+b
e=a+c
print("d=a+b\n",d)
print("e=a+c\n",e)

d=a+b
 [[2 2 2]
 [3 3 3]]
e=a+c
 [[2 2 2]
 [3 3 3]
 [4 4 4]]

高维数组之间的运算

a=np.array([[1,1,1],[2,2,2]])
b=np.array([[[1,1,1],[2,2,2]],[[3,3,3],[4,4,4]]])
c=a+b
print("c=a+b\n",c)

c=a+b
 [[[2 2 2]
  [4 4 4]]
 [[4 4 4]
  [6 6 6]]]

到此这篇关于关于Python中两个不同shape的数组间运算规则的文章就介绍到这了,更多相关Python两个不同shape的数组内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 浅谈python 读excel数值为浮点型的问题

    浅谈python 读excel数值为浮点型的问题

    今天小编就为大家分享一篇浅谈python 读excel数值为浮点型的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • pyCaret效率倍增开源低代码的python机器学习工具

    pyCaret效率倍增开源低代码的python机器学习工具

    这篇文章主要介绍了pyCaret一款可以使效率倍增的开源低代码的python机器学习工具,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2021-11-11
  • Python实现使用dir获取类的方法列表

    Python实现使用dir获取类的方法列表

    今天小编就为大家分享一篇Python实现使用dir获取类的方法列表,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • 浏览器常用基本操作之python3+selenium4自动化测试(基础篇3)

    浏览器常用基本操作之python3+selenium4自动化测试(基础篇3)

    浏览器常用基本操作有很多种,今天给大家介绍python3+selenium4自动化测试的操作方法,是最最基础的一篇,对python3 selenium4自动化测试相关知识感兴趣的朋友一起看看吧
    2021-05-05
  • Python FtpLib模块应用操作详解

    Python FtpLib模块应用操作详解

    这篇文章主要介绍了Python FtpLib模块应用操作,结合实例形式详细分析了FtpLib模块的功能、配置、应用相关操作技巧与使用注意事项,需要的朋友可以参考下
    2019-12-12
  • 在notepad++中实现直接运行python代码

    在notepad++中实现直接运行python代码

    今天小编就为大家分享一篇在notepad++中实现直接运行python代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • Python如何安装第三方模块

    Python如何安装第三方模块

    在本篇文章里,小编给大家分享的是关于Python安装第三方模块的方法及实例代码,需要的朋友们可以学习下。
    2020-05-05
  • 深入了解Python的继承

    深入了解Python的继承

    这篇文章主要为大家介绍了Python 继承,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-12-12
  • 将Python字符串生成PDF的实例代码详解

    将Python字符串生成PDF的实例代码详解

    这篇文章主要介绍了将Python字符串生成PDF的实例代码,本文通过代码给大家介绍的非常详细,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2019-05-05
  • Python函数进阶与文件操作详情

    Python函数进阶与文件操作详情

    这篇文章主要介绍了Python函数进阶与文件操作详情,文章为荣啊主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08

最新评论