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 实验

(1)数组与数字之间的运算

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 的数组运算,运算规则同数字与数组的运算。

(2)行向量与列向量之间的运算

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]]

(3)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]]

(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的数组间运算规则的更多相关文章

  1. python中的矩阵、多维数组----numpy

    https://docs.scipy.org/doc/numpy-dev/user/quickstart.html  (numpy官网一些教程) numpy教程:数组创建 python中的矩阵.多维数 ...

  2. 在Python中创建M x N的数组

    在Python中创建M x N的数组 一般有三种方法: 列表乘法 dp = [[0] * n] * m for 循环 dp= [[0 for _ in range(n)] for _ in range ...

  3. Python中的矩阵、多维数组:Numpy

    Numpy 是Python中科学计算的核心库.它提供一个高性能多维数据对象,以及操作这个对象的工具.部分功能如下: ndarray, 具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组. 用于对 ...

  4. python中两种栈实现方式的性能对比

    在计算机的世界中,同一个问题,使用不同的数据结构和算法实现,所使用的资源有很大差别 为了方便量化python中算法的资源消耗,对性能做测试非常有必要,这里针对stack做了python语言 下的性能分 ...

  5. Python中两大神器&exec() &eval()

    一.神器1 -- 内置函数eval eval是python中的内置函数,它的作用是将字符串变为所对应的表达式,也相当于一个功能代码加双引号变为字符串,而eval又将字符串转为相应的功能,它在使用过程中 ...

  6. Python中read()、readline()和readlines()三者间的区别和用法

    2019-01-15 10:48:43 前言 众所周知在python中读取文件常用的三种方法:read(),readline(),readlines(),今天看项目是又忘记他们的区别了.以前看书的时候 ...

  7. python中的矩阵、多维数组

    2. 创建一般的多维数组 import numpy as np a = np.array([1,2,3], dtype=int)  # 创建1*3维数组   array([1,2,3]) type(a ...

  8. 2.python中的矩阵、多维数组----numpy

    最近在将一个算法由matlab转成python,初学python,很多地方还不熟悉,总体感觉就是上手容易,实际上很优雅地用python还是蛮难的.目前为止,觉得就算法仿真研究而言,还是matlab用得 ...

  9. python中numpy库ndarray多维数组的的运算:np.abs(x)、np.sqrt(x)、np.modf(x)等

    numpy库提供非常便捷的数组运算,方便数据的处理. 1.数组与标量之间可直接进行运算 In [45]: aOut[45]:array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ ...

  10. Python中两种处理错误方法的比较

    我所说的处理错误的方法,其实是try:,except和raise这两种. 首先抛出一个实例, dictt={'a':1,'b':2,'c':3} try: if dictt['d']>1: #字 ...

随机推荐

  1. 【PID】初学者的pid,详细的介绍了代码为什么是这样写的

    from:Improving the Beginner's PID – Introduction « Project Blog (brettbeauregard.com)

  2. css - 使用 figure 和 figcaption 快速实现 图片加文字的垂直方向的布局 ( 不支持ie9以下版本 )

    一,属性介绍 1. 浏览器支持 注释:Internet Explorer 8 以及更早的版本不支持 <figure> 标签.Internet Explorer 9, Firefox, Op ...

  3. [转帖]记一次sst文件损坏修复过程

    https://tidb.net/blog/54e388c8 [2023-07-14 14:26:28]应用系统报警删除数据失败,查看日志报Region is unavailable,同时企业微信群也 ...

  4. [转帖]KingbaseES 服务器运行参数分类

    https://www.cnblogs.com/kingbase/p/16969149.html Kingbase 服务器运行参数分类 说明: KingbaseES 数据库中,服务器运行参数分为多种类 ...

  5. [转帖]Jmeter创建数据库(JDBC)测试-4

    上一章节讲述如何建立HTTP请求测试,本章节将介绍使用MySQL数据库驱动程序进行JDBC测试.要使用该驱动程序,必须将其包含的.jar文件(例如mysql-connector-java-XXX-bi ...

  6. 【转帖】AMD EPYC——CPU命名规则

    AMD的三代服务器CPU都属于7000系列大锅,那么您如何知道要购买的产品呢? 只要看一下右边的最后一个数字,数字1代表第一代那不勒斯EPYC,数字2代表罗马型号,数字3代表新米兰产品. 始终从右到左 ...

  7. Python学习之八_调用Outlook发送邮件以及调用远程windows上面的python

    Python学习之八_调用Outlook发送邮件以及调用远程windows上面的python 摘要 之前只有一个需求是发送加密邮件. 之前一直是使用linux进行发送.但是总是无法发送加密邮件. 最近 ...

  8. Python学习之二:不同数据库相同表是否相同的比较方法

    摘要 昨天学习了使用python进行数据库主键异常的查看. 当时想我们有跨数据库的数据同步场景. 对应的我可以对不同数据库的相同表的核心字段进行对比. 这样的话能够极大的提高工作效率. 我之前写过很长 ...

  9. echarts api的介绍

    参考的地址:https://echarts.apache.org/zh/api.html echarts.init echarts.init(dom?: HTMLDivElement|HTMLCanv ...

  10. 玩一玩 golang 汇编(二)

    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 上次玩 golang 汇编是使用了一个 python 的 ...