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. 3. Oracle数据库异常关闭,导致错误3. Oracle数据库异常关闭,导致错误ERROR: ORA-01034: ORACLE ngt available; ORA-27101: shared memory realm does not exist

    之前由于电脑没电,强制关机,导致Oracle数据库异常关闭,再次启动电脑登陆数据库时,发生以下错误: 当我尝试重新启动数据库时,发生错误: 经过查阅资料后得知:缺少INITXE.ORA文件,需要从下图 ...

  2. CSS - 正确解决 float 高度坍塌的问题

    <!DOCTYPE html> <html lang="en" dir="ltr"> <head> <meta cha ...

  3. vocode-markdown导出pdf插件

    1. 背景 在vocode中编辑markdown格式文本文件,并将其导出为pdf格式文件 2. 插件 在 vscode的扩展市场中搜索插件"Markdown PDF" 并安装 选中 ...

  4. [转帖]Unix Domain Socket– IPC通信机制

    什么是Unix Domain Socket 基于socket的框架上发展出一种IPC机制,就是UNIX Domain Socket.虽然网络socket也可用于同一台主机的进程间通讯(通过loopba ...

  5. [转帖]一文带你搞懂xxl-job(分布式任务调度平台)

    https://zhuanlan.zhihu.com/p/625060354 前言 本篇文章主要记录项目中遇到的 xxl-job 的实战,希望能通过这篇文章告诉读者们什么是 xxl-job 以及怎么使 ...

  6. [转帖]dd命令中dsync和fsync区别

    在Linux系统中经常会使用dd命令来测试硬盘的写入速度,命令会涉及几个常用参数:sync.dsync.fsync与fdatasync # dd if=/dev/zero of=/tmp/1G bs= ...

  7. Typescript中存取器getters和setters的使用

    1.存取器 存取器可以让我们可以有效的控制对,对象中的中的成员的访问. 可以通过getters和setters来进行操作 在typescript中分别对应 get 和 set 2.如何解决报错 typ ...

  8. Docker获取Let`s Encrypt SSL 证书

    文中的操作都是在CentOS Stream release 9下执行的,使用的是root用户. 1. 安装docker # 卸载原有的docker yum remove docker docker-c ...

  9. 淘宝一面:“说一下 Spring Boot 自动装配原理呗?”

    本文已经收录进 Github 95k+ Star 的Java项目JavaGuide .JavaGuide项目地址 : https://github.com/Snailclimb/JavaGuide . ...

  10. 样本数量不平衡问题方案(Focal Loss & Circle Loss)

    1.Focal Loss focal loss是最初由何恺明提出的,最初用于图像领域解决数据不平衡造成的模型性能问题.本文试图从交叉熵损失函数出发,分析数据不平衡问题,focal loss与交叉熵损失 ...