arrayfun, cellfun, bsxfun函数与Faster R-CNN代码

2024-08-21 16:08

本文主要是介绍arrayfun, cellfun, bsxfun函数与Faster R-CNN代码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在Faster R-CNN的matlab代码里,看到了很多不认识的“fun”系列函数,在此总结一下。
首先,向量化编程:arrayfun及cellfun函数的使用,来实现将任意函数应用到数组内包括结构在内的所有元素。这样很多以前不可避免的循环现在可以向量化了。而向量化正是Matlab不遗余力追求的核心思想之一。同时,在元素个数不匹配的两个量直接计算时,bsxfun函数得以很好解决。

arrayfun

简单例子:

y = arrayfun(@(alpha) f1(x,k,alpha), alpha,'UniformOutput',false);  

其中,x是数据,k是定下来的参数,alpha是待调参数,比如alpha = [1,2,3];

来看一下Faster R-CNN里一个例子:

[anchors, im_scales] = arrayfun(@(x) func(im_size, conf, x, feature_map_size), ...conf.scales, 'UniformOutput', false);

func函数的返回值是一个向量,对conf.scales中的每一个元素调用func函数,计算结果放在anchors, im_scales中,生成的anchors, im_scales也都应该是向量。

cellfun

简单例子:

y = cellfun(@(alpha) f1(x,k,alpha), alpha,'UniformOutput',false);  

这里与arrayfun不同的是:待定参数alpha是cell,即alpha = {1,2,3}; 那么该例子即可实现输入x,k,alpha(cell量),进行函数f1操作,得到同是y。

来看一下Faster R-CNN里一个例子:

bbox_targets{i} = cellfun(@(x, y) ...compute_targets(conf, scale_rois(gt_rois, im_size, y), gt_labels,  x, image_roidb_cell{i}, y), ...anchors, im_scales, 'UniformOutput', false);

查看前后代码:可以找到compute_targets函数定义:

function bbox_targets = compute_targets(conf, gt_rois, gt_labels, ex_rois, image_roidb, im_scale)

同理,cellfun函数即为,将cell里每一个量anchors, im_scales作为输入量替代上式中的x,y位置,进行compute_targets函数操作。

bsxfun

C=bsxfun(fun,A,B)

bsxfun与上述两个函数有一定差异,主要是进行两个数组间元素逐个的计算,如:直接对一个矩阵A的每一列或者每一行与同一个长度相等的 向量 a 进行某些操作。这里的fun主要是函数句柄或者m文件,同时也可以是内置函数:
@plus 加
@minus 减
@times 数组乘
@rdivide 左除,Right array divide
@ldivide 右除,Left array divide

来看一下Faster R-CNN里一个例子:

means = bsxfun(@rdivide, sums, class_counts);
stds = (bsxfun(@minus, bsxfun(@rdivide, squared_sums, class_counts), means.^2)).^0.5;

这里的means得到的结果即为class_counts里每行(列)元素除以sums(A左除B即为 inv(A)*B)。
而这里的stds得到的结果即为class_counts里每行(列)元素除以squared_sums,得到的矩阵的每行(列)数字减去means.^2,得到的矩阵里的一行(列)数再都 .^0.5。
虽然有点绕口,但是很容易理解,就是对于需要操作的A,B矩阵,如果A和B的大小相同,那么直接正常运算。但如果有某维不同,那么bsxfun就将少的这个虚拟的复制一些来使与多的维数一样,完成两个数组间元素不对等时候的逐个元素的计算。

这篇关于arrayfun, cellfun, bsxfun函数与Faster R-CNN代码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1093632

相关文章

Python函数作用域与闭包举例深度解析

《Python函数作用域与闭包举例深度解析》Python函数的作用域规则和闭包是编程中的关键概念,它们决定了变量的访问和生命周期,:本文主要介绍Python函数作用域与闭包的相关资料,文中通过代码... 目录1. 基础作用域访问示例1:访问全局变量示例2:访问外层函数变量2. 闭包基础示例3:简单闭包示例4

Java集合之Iterator迭代器实现代码解析

《Java集合之Iterator迭代器实现代码解析》迭代器Iterator是Java集合框架中的一个核心接口,位于java.util包下,它定义了一种标准的元素访问机制,为各种集合类型提供了一种统一的... 目录一、什么是Iterator二、Iterator的核心方法三、基本使用示例四、Iterator的工

Java 线程池+分布式实现代码

《Java线程池+分布式实现代码》在Java开发中,池通过预先创建并管理一定数量的资源,避免频繁创建和销毁资源带来的性能开销,从而提高系统效率,:本文主要介绍Java线程池+分布式实现代码,需要... 目录1. 线程池1.1 自定义线程池实现1.1.1 线程池核心1.1.2 代码示例1.2 总结流程2. J

Python中isinstance()函数原理解释及详细用法示例

《Python中isinstance()函数原理解释及详细用法示例》isinstance()是Python内置的一个非常有用的函数,用于检查一个对象是否属于指定的类型或类型元组中的某一个类型,它是Py... 目录python中isinstance()函数原理解释及详细用法指南一、isinstance()函数

python中的高阶函数示例详解

《python中的高阶函数示例详解》在Python中,高阶函数是指接受函数作为参数或返回函数作为结果的函数,下面:本文主要介绍python中高阶函数的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录1.定义2.map函数3.filter函数4.reduce函数5.sorted函数6.自定义高阶函数

Python中的sort方法、sorted函数与lambda表达式及用法详解

《Python中的sort方法、sorted函数与lambda表达式及用法详解》文章对比了Python中list.sort()与sorted()函数的区别,指出sort()原地排序返回None,sor... 目录1. sort()方法1.1 sort()方法1.2 基本语法和参数A. reverse参数B.

JS纯前端实现浏览器语音播报、朗读功能的完整代码

《JS纯前端实现浏览器语音播报、朗读功能的完整代码》在现代互联网的发展中,语音技术正逐渐成为改变用户体验的重要一环,下面:本文主要介绍JS纯前端实现浏览器语音播报、朗读功能的相关资料,文中通过代码... 目录一、朗读单条文本:① 语音自选参数,按钮控制语音:② 效果图:二、朗读多条文本:① 语音有默认值:②

Vue实现路由守卫的示例代码

《Vue实现路由守卫的示例代码》Vue路由守卫是控制页面导航的钩子函数,主要用于鉴权、数据预加载等场景,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录一、概念二、类型三、实战一、概念路由守卫(Navigation Guards)本质上就是 在路

uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)

《uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)》在uni-app开发中,文件上传和图片处理是很常见的需求,但也经常会遇到各种问题,下面:本文主要介绍uni-app小程序项目中实... 目录方式一:使用<canvas>实现图片压缩(推荐,兼容性好)示例代码(小程序平台):方式二:使用uni

JAVA实现Token自动续期机制的示例代码

《JAVA实现Token自动续期机制的示例代码》本文主要介绍了JAVA实现Token自动续期机制的示例代码,通过动态调整会话生命周期平衡安全性与用户体验,解决固定有效期Token带来的风险与不便,感兴... 目录1. 固定有效期Token的内在局限性2. 自动续期机制:兼顾安全与体验的解决方案3. 总结PS