首页 > 编程语言 >python中两个不同shape的数组间运算规则

python中两个不同shape的数组间运算规则

时间:2023-03-19 11:33:33浏览次数:42  
标签:运算 python print shape 数组 np array

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,print,shape,数组,np,array
From: https://www.cnblogs.com/zhyan8/p/17232656.html

相关文章

  • Python中文件读写操作
    1txt文件1.1写操作importnumpyasnpdefwrite(fileName,data):file=open(fileName,'w')row,col=data.shapestring=""foriinrange(row):......
  • python单元测试unittest
    快速上手#被测代码defadd_func(a,b):returna+b#测试代码importunittestclassMyTest(unittest.TestCase):deftest_add_func(self):#......
  • python有序字典在做题中的使用.
    66.两个链表的第一个公共结点  题目  提交记录  讨论  题解  视频讲解输入两个链表,找出它们的第一个公共结点。当不存在公共节点时,返回空......
  • 100道python基础题——(8)
    问题:编写一个程序,接受逗号分隔的单词序列作为输入,按字母顺序排序后按逗号分隔的序列打印单词。假设向程序提供以下输入:without,hello,bag,world则输出为:bag,hello,witho......
  • 100道python基础题——(9)
    多组输入问题:编写一个程序,接受一行序列作为输入,并在将句子中的所有字符大写后打印行。假设向程序提供以下输入:HelloworldPracticemakesperfect则输出为:HELLOWORLDP......
  • 100道python基础题——(7)
    问题:编写一个程序,以2位数字,X,Y作为输入,生成一个二维数组。数组的第i行和第j列中的元素值应该是i*j。注意:i=0,1..,X-1;j=0,1,­Y-1。例子假设程序有以下输入:......
  • Day 17 17.1 python之变量的作用域
    一、变量作用域变量的作用域Python是静态作用域,也就是说Python中,变量的作用域源于它在代码中的位置在不同的位置,可能有不同的命名空间。命名空间是变量作用域的体现......
  • 二维数组冒泡排序
    0.本文结构概述二维数组在内存中是线性存储二维数组排序(C语言代码)1.二维数组在内存中是线性存储2.二维数组排序(C语言代码)#include<stdio.h>intmain(intarg......
  • pta python实验1-3
    7-1HelloWorld这是学习每种程序设计语言的第一个实例。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬输出Hell......
  • 使用python自动监控程序运行过程数据
    操作系统:CentOS7.6.1810_x64Python版本:2.7.5一、背景描述工作中会遇到需要监控程序运行过程数据的情况,比如定时执行监控的cmd并记录执行结果,本文提供一种实现方式......