资讯专栏INFORMATION COLUMN

Numpy中的广播原则/机制

URLOS / 1345人阅读

摘要:这是为什么呢这里要提到的广播原则如果两个数组的后缘维度从末尾开始算起的维度的轴长度相符或其中一方的长度为,则认为它们是广播兼容的。

为了了解这个原则,首先我们来看一组例子:

# 数组直接对一个数进行加减乘除,产生的结果是数组中的每个元素都会加减乘除这个数。
In [12]: import numpy as np
In [13]: a = np.arange(1,13).reshape((4, 3))
In [14]: a * 2
Out[14]: array([[ 2, 4, 6],
                [ 8, 10, 12],
                [14, 16, 18],
                [20, 22, 24]])
# 接下来我们看一下数组与数组之间的计算
In [17]: b = np.arange(12,24).reshape((4,3))
In [18]: b
Out[18]: array([[12, 13, 14],
                [15, 16, 17],
                [18, 19, 20],
                [21, 22, 23]])
In [19]: a + b
Out[19]: array([[13, 15, 17],
                [19, 21, 23],
                [25, 27, 29],
                [31, 33, 35]])
In [20]: c = np.array([1,2,3])
In [21]: a+c
Out[21]: array([[ 2, 4, 6],
                [ 5, 7, 9],
                [ 8, 10, 12],
                [11, 13, 15]])
In [22]: d = np.arange(10,14).reshape((4,1))
In [23]: d
Out[23]: array([[10],
                [11],
                [12],
                [13]])
In [24]: a + d
Out[24]: array([[11, 12, 13],
                [15, 16, 17],
                [19, 20, 21],
                [23, 24, 25]])
# 从上面可以看出,和线性代数中不同的是,m*n列的m行的一维数组或者n列的一维数组也是可以计算的。

这是为什么呢?这里要提到numpy的广播原则:

如果两个数组的后缘维度(从末尾开始算起的维度)轴长度相符其中一方的长度为1,则认为它们是广播兼容的。广播会在缺失维度和(或)轴长度为1的维度上进行。

在上面的代码中,a的维度是(4,3),c的维度是(1,3);d的维度是(4,1)。所以假设有两个数组,第一个的维度是(x_1, y_1, z_1),另一个数组的维度是(x_2, y_2, z_2),要判断这两个数组能不能进行计算,可以用如下方法来判断:

if z_1 == z_2 or z_1 == 1 or z_2 == 1:
    if y_1 == y_2 or y_1 == 1 or y_2 == 1:
        if x_1 == x_2 or x_1 == 1 or x_2 == 1:
            可以运算
        else:
            不可以运算
    else:
        不可以运算
else:
    不可以运算

这里需要注意:(3,3,2)和(3,2)是可以运算的,因为对于二维数组(3,2)也可以表示为(1,3,2),套用上述的规则是完全适用的,同理:(4,2,5,4)和(2,1,4)也是可以进行运算的。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/42485.html

相关文章

  • Theano - 广播(broadcasting)

    摘要:广播广播是这样的一个机制它允许不同维度的张量进行加法或者乘法运算。如上图,广播一个行矩阵。和分别表示和指明沿着哪个维度可以进行广播。如果第二个参数是向量,它的形状为,以及它的广播模式为。当可用的时候,广播信息将会以变量的类型给出。 广播(Broadcasting) 广播是这样的一个机制:它允许不同维度的张量进行加法或者乘法运算。在运算时,他将会沿着维度缺失的方向复制较小的那个张量。 通...

    whjin 评论0 收藏0
  • python学习笔记 --- python中的list和numpy中的矩阵分析

    摘要:中的和中的矩阵分析由于之前在做的源码学习,并且将其的源码翻译成了的版本。在逛知乎里,我又发现了很多关于为什么这么快的讨论,很有意思。作者链接来源知乎著作权归作者所有。 python中的list和numpy中的矩阵分析 Author : Jasper Yang School : Bupt preface 由于之前在做GIbbsLDA++的源码学习,并且将其c++的源码翻译成了pyth...

    DobbyKim 评论0 收藏0
  • NumPy 基本切片和索引

    摘要:有三种可用的索引字段访问,基本切片,高级索引。基本切片和索引基本切片将的切片基本概念扩展到维。基本切片生成的所有数组始终是原始数组的视图。序列切片的标准规则适用于基于每维的基本切片包括使用步骤索引。因此,在基本切片下的行为。 https://docs.scipy.org/doc/nu... 索引 ndarrays可以使用标准Python x[obj]语法对其进行索引 ,其中x是数组,o...

    lemon 评论0 收藏0
  • Numpy 中文用户指南 1. 安装

    摘要:包的核心是对象。但有个例外,包括对象数组的元素大小是不同的。序列大小和速度在科学计算中尤为重要。例如考虑两个长度相同的列表中每个元素相乘的情况。此外,编码所需的工作量随数据维数的增加而增加。这些信息主要用于高级用户。 译者:飞龙 1.1 NumPy 是什么? 原文:What is NumPy? NumPy是Python中用于科学计算的基础包。它是一个Python库,提供多维数组对象,各...

    mochixuan 评论0 收藏0

发表评论

0条评论

URLOS

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<