最近总是遇到 bsxfun这个函数,前几次因为无关紧要只是大概看了一下函数体去对比结果,今天再一次遇见了这个函数,想想还是有必要掌握的,遂查了些资料总结如下。


函数bsxfun

【功能描述】两个数组间元素逐个计算.

【应用场合】当我们想对一个矩阵A的每一列或者每一行与同一个长度相等的向量a进行某些操作(比较大小,乘除等)时,我们只能用循环方法或者利用repmat函数将要操作的向量a复制成和A一样尺寸的矩阵,进而进行操作。从MATLAB R2007a开始,再遇到类似的问题时,我们有了简洁高效的方法,即利用bsxfun函数。
【函数描述】C=bsxfun(fun,A,B):两个数组间元素逐个计算,fun是函数句柄或者m文件,也可以为如下内置函数 :
@plus 加 ;         @minus 减 ;         @times 数组乘 ;         @rdivide 左除 ;        @ldivide 右除 。

Example1: 将一个矩阵的每行或每列元素分别扩大不同的倍数

如[1 2 3;4 5 6 ;7 8 9],第一列元素乘以1,第二列元素以2,第三列元素乘以4。利用bsxfun函数,可以给出下列代码:

<pre name="code" class="plain">a = [1,2,3;4,5,6;7,8,9];
acol = bsxfun(@times,a,[1 2 4])

Example2:假设我们有一列向量和一行向量。

<pre name="code" class="plain">a = randn(3,1);
b = randn(1,3);
a =0.7516-0.8637-1.0709
b =-0.3552    0.9559    0.1593
我们可以很简单的使用matlab的外乘来得到c=a*b,
c = a * b
c =-0.2670    0.7184    0.11970.3068   -0.8256   -0.13760.3804   -1.0236   -0.1706
   但如果我们想用”外加”呢?也就是说把上式求解过程中的乘号换做加号?这时我们可以用c=bsxfun(@plus,a,b)来实现。
 bsxfun的执行是这样的:如果a和b的大小相同,那么c=a+b; 但如果有某维不同,且a或b必须有一个在这一维的维数为1, 那么bsxfun就将少的这个虚拟的复制一些来使与多的维数一样。在我们这里,b的第一维只有1(只一行),所以bsxfun将b复制3次形成一个3×3的矩阵,同样也将a复制成3×3的矩阵。这个等价于c=repmat(a,1,3)+repmat(b,3,1)。这里,
repmat(a,1,3)
ans =
-0.2453 -0.2453 -0.2453
-0.2766 -0.2766 -0.2766
-0.1913 -0.1913 -0.1913
repmat是显式的复制,当然带来内存的消耗。而bsxfun是虚拟的复制,实际上通过for来实现,等效于:
for(i=1:3)for(j=1:3)c(i,j)=a(i)+b(j);end
end
但bsxfun不会有使用matlab的for所带来额外时间。实际验证下这三种方式:
从计算时间上来说前两种实现差不多,远高于for的实现。但如果数据很大,第二种实现可能会有内存上的问题。所以bsxfun最好。
>> c = bsxfun(@plus,a,b) c = 0.3609 0.3202 0.6604 0.3296 0.2889 0.6291 0.4149 0.3742 0.7144 

>> c = repmat(a,1,3)+repmat(b,3,1) c = 0.3609 0.3202 0.6604 0.3296 0.2889 0.6291 0.4149 0.3742 0.7144 

>> for(i=1:3)for(j=1:3)c(i,j)=a(i)+b(j);endend
>> c c = 0.3609 0.3202 0.6604 0.3296 0.2889 0.6291 0.4149 0.3742 0.7144

参考:http://blog.sina.com.cn/s/blog_9e67285801010ttn.html

http://blog.sina.com.cn/s/blog_6ca002a50100wvu1.html

matlab学习笔记 bsxfun函数相关推荐

  1. Matlab学习笔记 figure函数

    Matlab学习笔记 figure函数 matlab中的 figure 命令,能够创建一个用来显示图形输出的一个窗口对象.每一个这样的窗口都有一些属性,例如窗口的尺寸.位置,等等.下面一一介绍它们. ...

  2. matlab 调用子函数返回值,matlab学习笔记13_1 函数返回值

    一起来学matlab-matlab学习笔记13函数 13_1 函数返回值 觉得有用的话,欢迎一起讨论相互学习~Follow Me 函数返回一个值 返回值不必使用return语句,而是直接将需要返回的变 ...

  3. [MATLAB学习笔记]peaks函数1013(2)

    >> Z = peaksZ =1 至 10 列0.0001 0.0001 0.0002 0.0004 0.0007 0.0011 0.0017 0.0025 0.0034 0.00430. ...

  4. Matlab学习笔记——find()函数

    写在这里的初衷,一是备忘,二是希望得到高人指点,三是希望能遇到志同道合的朋友. 目录 find 1.功能 2.格式 3.说明 拓展 1.稀疏矩阵 2.魔方矩阵 find 1.功能 查找非零元素的值和下 ...

  5. MATLAB学习笔记 :函数文件的定义和使用

    数学建模比赛MATLAB从入门到精通教程_哔哩哔哩_bilibili function语法 1.编写函数文件,求半径为r的圆的面积和周长 (1)新建->函数 (2)编辑代码,保存 (3)回命令行 ...

  6. [MATLAB学习笔记]Rng函数

    'twister':梅森旋转 'simdTwister':面向 SIMD 的快速梅森旋转算法 'combRecursive':组合多递归 'philox':执行 10 轮的 Philox 4×32 生 ...

  7. Matlab学习笔记 figure函数

    matlab中的 figure 命令,能够创建一个用来显示图形输出的一个窗口对象.每一个这样的窗口都有一些属性,例如窗口的尺寸.位置,等等.下面一一介绍它们. 一.概述  总的来说,figure 的使 ...

  8. linspace函数matlab_从零开始的matlab学习笔记——(29)泰勒逼近函数

    matlab应用--求极限,求导,求积分,解方程,概率统计,函数绘图,三维图像,拟合函数,动态图....更多内容尽在个人专栏:matlab学习 上一节我们成功制作了能自己转圈的三维螺旋线,这里我们再来 ...

  9. matlab数组平方的计算自定义函数_从零开始的matlab学习笔记——(38)简单数论计算函数:取整,gcd,lcm,质数,全排列...

    matlab应用--求极限,求导,求积分,解方程,概率统计,函数绘图,三维图像,拟合函数,动态图,傅里叶变换,随机数,优化问题....更多内容尽在个人专栏:matlab学习 翻了翻优化工具箱,发现内容 ...

最新文章

  1. “怀才不遇”与“怀才不孕”怎么办?
  2. String和Date、Timestamp之间的转换
  3. 干货 | 深度剖析C语言的main函数
  4. linux location root访问文件夹404_如何使网站支持https访问?nginx配置https证书
  5. android glu,我可以使用glu与Android NDK
  6. linux la 的使用方法,Linux简介及常用命令使用4--linux高级命令与技巧(示例代码)
  7. c++ primer 5th(中文版)勘误
  8. 牛客第三场多校 H Diff-prime Pairs
  9. dom4j处理XML的一些经验
  10. 《中文分词算法研究》
  11. 挑战程序设计竞赛:Ants
  12. 自定义Teams会议录像提示
  13. 扔掉你 Windows 操作系统中的盗版软件吧
  14. 无心剑中译拜伦诗4首
  15. Day001--Scala中的下载安装配置及下载安装集成开发环境IDEA
  16. 将两个各有n个元素的有序表归并成一个有序表,其最多的比较次数
  17. 开发问题解决之IDEA无故显示红色
  18. gpfdist故障诊断
  19. Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/account
  20. CEC 2021基准测试集

热门文章

  1. php 两种递归方法
  2. 安卓前端开发!移动APP开发框架盘点,附带学习经验
  3. 如何发表期刊方法步骤
  4. 豆瓣 vs 知乎 vs 简书
  5. java中容易产生空指针异常:NullPointerException的场景
  6. 【阿里云IoT+YF3300】7.物联网设备表达式运算
  7. WormHole是一个简单、易用的api管理平台,支持dubbo服务调用
  8. 微信小程序使用qrcode生成二维码(可用于微信收款)
  9. LazyAn-—《合成大西瓜》怎么做?原版游戏还原
  10. win10解决安装时的2503 2502问题