[开发技巧]·Numpy广播机制的深入理解与应用

[开发技巧]·Numpy广播机制的深入理解与应用

1.问题描述

我们在使用Numpy进行数据的处理时,经常会用到广播机制来简化操作,例如在所有元素都加上一个数,或者在某些纬度上作相同的操作。广播机制很方便,但是概念却也有些复杂,可能会让一些初学者感到困惑,在使用过程中,产生一些错误。

本文以实战演练的方式来讲解广播机制的概念与应用,不仅仅适用于Numpy,在TensorFlow,PyTorch,MxNet的广播机制中同样适用。

2.原理讲解

广播机制遵循一下准则:

1.首先以最长纬度为准拓展为相同纬度大小,有些纬度为零,先变为1,在进行广播。

2.纬度上从右往左进行匹配,两个数组要么在一个纬度上相同,要么其中一个为1。

3.各个相匹配纬度上的数据都以此最长的shape为准进行复制对齐。

3.实战演练

>>> import numpy as np
>>> num1 = np.array(3)
>>> num1.shape
()
>>> al = np.ones([1,3])
>>> bl = np.ones([4,1])*2
>>> al
array([[1., 1., 1.]])
>>> bl
array([[2.],
       [2.],
       [2.],
       [2.]])

我们新建了一些数据,其中num1是一个标量,纬度为0,al与bl都是纬度为2的矩阵

现在我们让al+num1

>>> al_num1 = al+num1
>>> al_num1
array([[4., 4., 4.]])

根据矩阵加法的准则,两个矩阵的形状必须相同,对应元素相加,我们可以求得num1广播操作时,变成了array([[3., 3., 3.]])

其实就对应上面三个法则,首先这两个数据先进行条件1的操作,num1就变成了array([[3.]]),然后就满足了条件2,被条件3进行了广播。

再举一个例子,让al+bl,和上面例子类似,al与bl都被拓展为了shape(4,3),大家可以自己根据法则计算推理一遍。

>>> al_bl = al + bl
>>> al_bl
array([[3., 3., 3.],
       [3., 3., 3.],
       [3., 3., 3.],
       [3., 3., 3.]])

最后举一个不符合的例子

>>> cl = np.ones([2,2])*3
>>> cl
array([[3., 3.],
       [3., 3.]])
>>> al_cl = al + cl
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: operands could not be broadcast together with shapes (1,3) (2,2) 

为什么此次广播失败了呢,我们可以发现cl与al的最右边第一个纬度,大小既不相等,其中一个也不为1或者0(如果为0也会被拓展为1)。所以无法进行广播。

Hope this helps

原文地址:https://www.cnblogs.com/xiaosongshine/p/10744632.html

时间: 2024-11-06 03:50:01

[开发技巧]·Numpy广播机制的深入理解与应用的相关文章

numpy广播机制,取特定行、特定列的元素 的高级索引取法

numpy广播机制,取特定行.特定列的元素 的高级索引取法 enter description here enter description here 原文地址:https://www.cnblogs.com/lishikai/p/12361513.html

安卓开发笔记——Broadcast广播机制(实现自定义小闹钟)

什么是广播机制? 简单点来说,是一种广泛运用在程序之间的传输信息的一种方式.比如,手机电量不足10%,此时系统会发出一个通知,这就是运用到了广播机制. 广播机制的三要素: Android广播机制包含三个要素:广播(Broadcast) - 用于发送广播:广播接收器(BroadcastReceiver) - 用于接收广播:意图(Intent)-用于保存广播相关信息的媒介. 可以把它理解成我们的传统电视台,我们的电视就是一个广播接收器,然而电视有很多频道,是由电视台发送出来的,也就是广播了,意图可以

安卓开发_深入理解广播机制

一.Broadcast(广播) 在Android中,有一些操作完成以后,会发送广播,比如说发出一条短信,或打出一个电话,如果某个程序接收了这个广播,就会做相应的处理.这个广播跟我们传统意义中的电台广播有些相似之处.之所以叫做广播,就是因为它只负责“说”而不管你“听不听”,也就是不管你接收方如何处理.另外,广播可以被不只一个应用程序所接收,当然也可能不被任何应用程序所接收. (百度百科) 二.BroadcastReceiver(广播接收器) 1.自定义BroadcastReceiver 自定义广播

转: 从现实生活中理解什么是广播机制

来自:http://blog.sina.com.cn/s/blog_714338950100p4km.html 一听到广播我们第一感觉就会联想到小时候村里面的广播,每逢村里有什么活动都是通过广播发送的.收听收音机也是一种广播,在收音机中有很多个广播电台,每个广播电台播放的内容都不相同.接收广播时广播(发送方)并不在意我们(接收方)接收到广播时如何处理.好比我们收听交通电台的广播,电台中告诉我们现在在交通状况如何,但它并不关心我们接收到广播时做如何做出处理,这不是广播应该关心的问题,OK,到这里我

安卓开发技巧一:深入理解Android布局中Layout_weight的属性

今天开始将要为大家介绍一些安卓开发过程将要用到的一些技巧,这些技巧全部来自网络搜集,或者自己在企业做项目的时候总结出来的,利用这些技巧将会对我们开发带来非常方便的便捷性. 先来记录一下这一段时间的技巧目录,方便大家以后方便查阅(大概有不到三十种的技巧总结,大概每周分享两个技巧,笔者将尽可能写的详细,以及提供实例源码): 安卓开发技巧一:深入理解Android布局中Layout_weight的属性 安卓开发技巧二:自定义日志工具类 安卓开发技巧三:Activity的启动模式 安卓开发技巧四:分享一

Numpy常用概念-对象的副本和视图、向量化、广播机制

一.引言 在我们操作数组的时候,返回的是新数组还是原数组的链接,我们就需要了解对象副本和视图的区别. 向量化和广播是numpy内部实现的基础. 二.对象副本和视图 我们应该注意到,在操作数组的时候返回的不是视图就是副本. 副本:复制 视图:链接 1.所有的赋值运算不会为此创建副本.把数组a赋值给了数组b,实际上不是为数组a创建副本,b只是调用a的另一种方式.实际上,修改了b数组的第二个元素,a数组的第二个数组也随之被改变. In [1]: a = np.array([1,2,3,4,5]) In

numpy:数组的运算与广播机制

先将模块导入到文件中 import numpy as np 创建两个数组 arr1 = np.array([[1, 1], [3, 3]]) arr2 = np.array([[1, 2], [3, 4]]) 1.数组的运算 (1)四则运算 print("数组相加:\n", arr1 + arr2) # 对应位置元素相加 print("数组相减:\n", arr1 - arr2) # 对应位置元素相减 print("数组相乘:\n", arr1

详解广播机制,Broadcast Receiver,Android进阶必备知识(一)。

直奔主题,关于广播的一些定义什么的我觉得只要是一名合格的初级android开发这都知道吧,我下面要做的就是怎么去使用broadcast receiver. 1.怎么去监听系统广播? Android系统有很多内置的系统广播:电话,短信,时间,地区,电池电量,网络变化等等...那么我们怎么去在我们的应用中实现监听呢?下面我们以监听手机网络发生改变的广播进行监听,都知道广播有两种注册方式,在这里我使用的代码注册的方式,为的是能更好的去理解广播运行机制.在代码中注册一定要注意在你使用完毕的时候一定要反注

[开发技巧]&#183;TopN指标计算方法

[开发技巧]·TopN指标计算方法 ? 1.概念介绍 在图片分类的中经常可以看到Top-1,Top-5等TopN准确率(或者时错误率). 那这个TopN是什么意思呢?首先Top-1准确率最好理解,就是我们用argmax从网络输出取到的预测index与真实index的准确率. Top-5准确率就是指从网络输出取到的预测概率最大5个index与真实的index进行比对,5个之中任意一个比对成功就算预测正确了.同理Top-3就是指概率最大3个index. 2.问题分析 可以发现Top-1的准确率很容易