简单总结广播机制

简介: 简单总结广播机制

这部分对矩阵运算有着特殊的影响,包括numpy等。

当两个维度相同的数组相加时,实际就时对应元素相加,很容易想象。

如下:

1453c01f47c841f89dde871c8b580336.png

但是如果维度不同的!!!接下来进行讨论:定义放上来很难懂,我就直接结合图进行理解

问题描述:假设我们有两个矩阵维度分维度不同。正常情况下,两个矩阵直接相加应该是元素对应相加,但是例子中维度不同元素难以对应,就会出现问题。

此时,广播机制的作用就体现了出来,他会将其中维度较小的进行x或y方向的复制,然后相加

图1:y方向的复制

f2296edc36d54ad79b50e27395bb8440.png

图2:x方向的复制

bf6b2a6ee041427ebd8fafbf908c72e5.png

通过上面看,两个矩阵还是有一定规律的,假设,维度较大的为(w, h),那么较小的为(1, h)或(w, 1)即较小维度的矩阵满足其其中一个维度为1,其余维度与较大维度矩阵的维度一致。这也是广播机制应用的条件。其余不满足此条件的无法使用广播机制。

假设我们有下面一段代码:

import torch
l1 = torch.as_tensor([[1, 2], [3, 4], [5, 6]])
l2 = torch.as_tensor([[7, 8]])
print(l1.shape)
print(l2.shape)
print(l1 + l2)

因为l1维度为(3, 2),l2维度为(1, 2)。l2为维度较小的矩阵,其中第一维度为1,第二维度与l1相同,满足广播机制触发条件,因此可以相加。结果如下:

torch.Size([3, 2])
torch.Size([1, 2])
tensor([[ 8, 10],
        [10, 12],
        [12, 14]])

就是类似上面图2的过程

这是二维上面的,如果是三维的可以吗?一段代码进行尝试:

l1 = torch.as_tensor([[[1, 2], [3, 4], [5, 6]]])
l2 = torch.as_tensor([[[7, 8]], [[9, 10]]])
print(l1.shape)
print(l2.shape)
print(l1 + l2)
print((l1 + l2).shape)

l1维度是(1, 3, 2),l2维度是(2, 1, 2)。运行以下代码,是可以通过的!!!

torch.Size([1, 3, 2])
torch.Size([2, 1, 2])
tensor([[[ 8, 10],
         [10, 12],
         [12, 14]],
        [[10, 12],
         [12, 14],
         [14, 16]]])
torch.Size([2, 3, 2])

**从上面看,我们三维度的广播机制有些不太符合我们上面总结的广播机制应用条件,但是可以将三维拆开进行理解。**如上面可以拆分为两组二维,分别是l1_1(1,2),l2_1(2, 2)和l1_2(3, 2),l2_2(1, 2),后面与二维操作一致。

相关文章
|
测试技术 C++ 索引
【NumPy 数组副本 vs 视图、NumPy 数组形状、重塑、迭代】
【NumPy 数组副本 vs 视图、NumPy 数组形状、重塑、迭代】
|
7月前
|
存储 数据处理 Python
NumPy数组运算:元素级与广播机制剖析
【4月更文挑战第17天】NumPy是Python数值计算库,提供元素级运算和广播机制。元素级运算针对数组每个元素单独计算,如加法、减法等;广播机制允许不同形状数组间运算,通过扩展小数组形状匹配大数组。了解这两点能帮助更好地运用NumPy进行数值计算和数据处理。
|
算法 数据挖掘 计算机视觉
numpy ndarray嵌套ndarray浅显理解
numpy ndarray嵌套ndarray浅显理解
|
Python
Numpy中数组和矩阵操作的数学函数
Numpy 是一个强大的 Python 计算库。它提供了广泛的数学函数,可以对数组和矩阵执行各种操作。本文中将整理一些基本和常用的数学操作。
157 0
Numpy中数组和矩阵操作的数学函数
|
机器学习/深度学习 存储 索引
NumPy中的广播:对不同形状的数组进行操作
NumPy中的广播:对不同形状的数组进行操作
128 0
NumPy中的广播:对不同形状的数组进行操作
|
Python
numpy重新学习系列-numpy的四则运算(13)
numpy重新学习系列-numpy的四则运算(13)
71 0
|
Python
numpy广播机制
numpy广播机制
80 0
|
Python
Numpy中的广播机制,你确定正确理解了吗?
Numpy其提供了大量常用的数值计算功能,当然这些数值计算函数大多依赖于其核心的数据结构:ndarray,也就是N维数组。而关于这个ndarray,有一个重要特性是广播机制,也正是整个广播机制,使得Numpy中的数值计算功能更加丰富和强大。那么问题来了,你是否已经正确理解了这个广播机制呢?
165 0
Numpy中的广播机制,你确定正确理解了吗?
|
存储 Python
numpy的使用说明(五):数组的广播机制、数组元素的底层存储(一)
numpy的使用说明(五):数组的广播机制、数组元素的底层存储(一)
numpy的使用说明(五):数组的广播机制、数组元素的底层存储(一)