数组的广播机制
2021-8-1
| 2023-8-6
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password
Property

数组与数的计算

Python列表中,想要对列表中所有的元素都加一个数,要么采用map函数,要么循环整个列表进行操作。但是NumPy中的数组可以直接在数组上进行操作:
 
 

数组与数组的计算

结构相同的数组之间的运算

 

与行数相同并且只有1列的数组之间的运算

 

与列数相同并且只有1行的数组之间的运算

 

广播原则

如果两个数组的后缘维度(trailing dimension,即从末尾开始算起的维度)的轴长度相符或其中一方的长度为1,则认为他们是广播兼容的,广播会在缺失和(或)长度为1的维度上进行
  1. shape(3,8,2)的数组能和(8,3)的数组进行运算吗? 不能,按照广播原则,从后面往前面数,(3,8,2)(8,3)中的23不相等,所以不能进行运算。
  1. shape(3,8,2)的数组能和(8,1)的数组进行运算吗? 能,按照广播原则,从后面往前面数,(3,8,2)(8,1)中的21虽然不相等,但是因为有一方的长度为1,所以能参与运算。
  1. shape(3,1,8)的数组能和(8,1)的数组进行运算吗? 能,按照广播原则,从后面往前面数,(3,1,4)(8,1)中的41虽然不相等且18不相等,但是因为这两项中有一方的长度为1,所以能参与运算。
 
简单理解:对两个数组,分别比较他们的每一个维度(若其中一个数组没有当前维度则忽略),满足:
  • 数组拥有相同形状。
  • 当前维度的值相等。
  • 当前维度的值有一个是 1。
若条件不满足,抛出 "ValueError: frames are not aligned" 异常。
 
下面的图片展示了数组 b 如何通过广播来与数组 a 兼容
notion image
 
  • Numpy
  • 数组索引和切片迭代数组
    目录