numpy数组广播的机制

numpy数组的广播功能强大,但是也同时让人疑惑不解,现在让我们来谈谈其中的原理。

广播原则:

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

上面的原则很重要,是广播的指导思想,下面我们来看看例子。

1.其实在最简单的数组与标量数字之间的运算就存在广播,只是我们把它看作理所当然了。

2.再看下一个例子,这个大家都会一致认为这是广播了

根据广播原则:arr1的shape为(4,1),arr2的shape为(3,),所以会同时在两个轴发生广播,arr1的shape变成(4,3),而arr2的shape变成(4,3),所以结果也为(4,3).

其实代码中发生了下图描述的事情:

3.同理,我们可以得到三维数组的广播情况

根据广播原则分析:arr1的shape为(3,4,2),arr2的shape为(4,2),它们的后缘轴长度都为(4,2),所以可以在0轴进行广播,arr2的shape变为(3,4,2).

下面说明一下三维数组在各维度的广播形状需求:

以上所有形状都可以发生广播,你可以用我们开篇所说的广播原则进行验证。

最后,再来说一个易错的实际例子。

arr减去他在1轴上的平均值,会出错?看看为啥。

因为arr.mean(1)产生的shape为(4,),根据广播原则,较小的数组的后缘维度必须为1,

所以需要将arr.mean变成(4,1),你所期望的结果如下:

参考:《利用Python进行数据分析》

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 详解Numpy中的广播原则/机制

    广播的原则 如果两个数组的后缘维度(从末尾开始算起的维度)的轴长度相符或其中一方的长度为1,则认为它们是广播兼容的.广播会在缺失维度和(或)轴长度为1的维度上进行. 在上面的对arr每一列减去列平均值的例子中,arr的后缘维度为3,arr.mean(0)后缘维度也是3,满足轴长度相符的条件,广播会在缺失维度进行. 这里有点奇怪的是缺失维度不是axis=1,而是axis=0,个人理解是缺失维度指的是两个arr除了轴长度匹配的维度,在上面的例子中,正好是axis=0.这块欢迎指正 arr.mean(

  • numpy数组广播的机制

    numpy数组的广播功能强大,但是也同时让人疑惑不解,现在让我们来谈谈其中的原理. 广播原则: 如果两个数组的后缘维度(即:从末尾开始算起的维度)的轴长相符或其中一方的长度为1,则认为它们是广播兼容的,广播会在缺失和(或)长度为1的轴上进行. 上面的原则很重要,是广播的指导思想,下面我们来看看例子. 1.其实在最简单的数组与标量数字之间的运算就存在广播,只是我们把它看作理所当然了. 2.再看下一个例子,这个大家都会一致认为这是广播了 根据广播原则:arr1的shape为(4,1),arr2的sh

  • Numpy数组的广播机制的实现

    前言 Numpy数组不需要循环遍历,即可对每个元素执行批量的算术运算操作(矢量化运算).当两个数组大小(Numpy.shape)不同时,进行算术运算会出现广播机制. 数组广播 数组在进行矢量化运算的时,要求数组形状时相等的.当形状不等的数组执行算术运算的时候,就会出现广播机制,该机制会对数组进行扩展,使数组的shape属性值一样,就可以进行矢量化运算了. import numpy as np arr1 = np.array([[0], [1], [2], [3]]) print(arr1.sha

  • Numpy数组的组合与分割实现的方法

    目录 数组的组合 1.水平组合 2.垂直组合 3.行组合和列组合 4.深度组合 数组的分割 1.水平分割 1.1hsplit函数 1.2split函数 2.垂直分割 3.深度分割 在介绍数组的组合和分割前,我们需要先了解数组的维(ndim)和轴(axis)概念. 如果数组的元素是数组,即数组嵌套数组,我们就称其为多维数组.几层嵌套就称几维.比如形状为(a,b)的二维数组就可以看作两个一维数组,第一个一维数组包含a个一维数组,第二个一维数组包含b个数据. 每一个一维线性数组称为一个轴.二维数组的第

  • Python如何遍历numpy数组

    目录 Python遍历numpy数组 numpy中数组的遍历技巧分享 1. 内置for循环 2. flat迭代器 3. nditer迭代器 Python遍历numpy数组 下面是示例代码: import numpy as np num = np.zeros([2, 3]) [rows, cols] = num.shape print(rows, cols) for i in range(rows):     for j in range(cols):         print(num[i, j

  • Numpy 数组索引的实现

    目录 一.整数索引 二.切片索引 2.1.一维数组切片 三.整数数组索引 3.1. 一维数组的整数数组索引 3.2.多维数组的整数数组索引 四.布尔索引 五.花式索引 数组索引是指使用方括号([])来索引数组值,numpy提供了比常规的python序列更多的索引工具.除了按整数和切片索引之外,数组可以由整数数组索引.布尔索引及花式索引.下面逐一学习. 一.整数索引 这种机制有助于基于 N 维索引来获取数组中任意元素. 每个整数数组表示该维度的下标值. 当索引的元素个数就是目标ndarray的维度

  • 对numpy 数组和矩阵的乘法的进一步理解

    1.当为array的时候,默认d*f就是对应元素的乘积,multiply也是对应元素的乘积,dot(d,f)会转化为矩阵的乘积, dot点乘意味着相加,而multiply只是对应元素相乘,不相加 2.当为mat的时候,默认d*f就是矩阵的乘积,multiply转化为对应元素的乘积,dot(d,f)为矩阵的乘积 3. 混合时候的情况,一般不要混合 混合的时候默认按照矩阵乘法的, multiply转化为对应元素的乘积,dot(d,f)为矩阵的乘积 总结:数组乘法默认的是点乘,矩阵默认的是矩阵乘法,混

  • Python中numpy数组的计算与转置详解

    目录 前言 1.numpy数组与数的运算 2.numpy相同尺寸的数组运算 3.numpy不同尺寸的数组计算 4.numpy数组的转置 总结: 前言 本文主要讲述numpy数组的计算与转置,讲相同尺寸数组的运算与不同尺寸数组的运算,同时介绍数组转置的三种方法. numpy数组的操作比较枯燥,但是都很实用,在很多机器学习.深度学习算法中都会使用到,对numpy数组的一些操作. 1.numpy数组与数的运算 主要包括数组与数的加减乘除运算,废话不多说,看代码: import numpy as np

  • Python中的numpy数组模块

    目录 一.numpy简介 1.numpy库作用: 2.NumPy 是一个运行速度非常快的数学库,主要用于数组计算,包含: 3.NumPy 应用 二.为什么用numpy 三.创建numpy数组 1.将列表转换创建numpy数组,可选择显式指定dtype 2.arange方式创建numpy数组 3.其他方式创建numpy数组 4.numpy或pandas中reshape()重塑形状(行列转换)的用法 4.numpy.random生成随机数 5. fromstring/fromfunction(了解)

  • Android基于广播事件机制实现简单定时提醒功能代码

    本文实例讲述了Android基于广播事件机制实现简单定时提醒功能代码.分享给大家供大家参考,具体如下: 1.Android广播事件机制 Android的广播事件处理类似于普通的事件处理.不同之处在于,后者是靠点击按钮这样的组件行为来触发,而前者是通过构建Intent对象,使用sentBroadcast()方法来发起一个系统级别的事件广播来传递信息.广播事件的接收是通过定义一个继承Broadcast Receiver的类实现的,继承该类后覆盖其onReceive()方法,在该方法中响应事件.And

随机推荐