matlab学习笔记 bsxfun函数
最近总是遇到 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函数相关推荐
- Matlab学习笔记 figure函数
Matlab学习笔记 figure函数 matlab中的 figure 命令,能够创建一个用来显示图形输出的一个窗口对象.每一个这样的窗口都有一些属性,例如窗口的尺寸.位置,等等.下面一一介绍它们. ...
- matlab 调用子函数返回值,matlab学习笔记13_1 函数返回值
一起来学matlab-matlab学习笔记13函数 13_1 函数返回值 觉得有用的话,欢迎一起讨论相互学习~Follow Me 函数返回一个值 返回值不必使用return语句,而是直接将需要返回的变 ...
- [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. ...
- Matlab学习笔记——find()函数
写在这里的初衷,一是备忘,二是希望得到高人指点,三是希望能遇到志同道合的朋友. 目录 find 1.功能 2.格式 3.说明 拓展 1.稀疏矩阵 2.魔方矩阵 find 1.功能 查找非零元素的值和下 ...
- MATLAB学习笔记 :函数文件的定义和使用
数学建模比赛MATLAB从入门到精通教程_哔哩哔哩_bilibili function语法 1.编写函数文件,求半径为r的圆的面积和周长 (1)新建->函数 (2)编辑代码,保存 (3)回命令行 ...
- [MATLAB学习笔记]Rng函数
'twister':梅森旋转 'simdTwister':面向 SIMD 的快速梅森旋转算法 'combRecursive':组合多递归 'philox':执行 10 轮的 Philox 4×32 生 ...
- Matlab学习笔记 figure函数
matlab中的 figure 命令,能够创建一个用来显示图形输出的一个窗口对象.每一个这样的窗口都有一些属性,例如窗口的尺寸.位置,等等.下面一一介绍它们. 一.概述 总的来说,figure 的使 ...
- linspace函数matlab_从零开始的matlab学习笔记——(29)泰勒逼近函数
matlab应用--求极限,求导,求积分,解方程,概率统计,函数绘图,三维图像,拟合函数,动态图....更多内容尽在个人专栏:matlab学习 上一节我们成功制作了能自己转圈的三维螺旋线,这里我们再来 ...
- matlab数组平方的计算自定义函数_从零开始的matlab学习笔记——(38)简单数论计算函数:取整,gcd,lcm,质数,全排列...
matlab应用--求极限,求导,求积分,解方程,概率统计,函数绘图,三维图像,拟合函数,动态图,傅里叶变换,随机数,优化问题....更多内容尽在个人专栏:matlab学习 翻了翻优化工具箱,发现内容 ...
最新文章
- “怀才不遇”与“怀才不孕”怎么办?
- String和Date、Timestamp之间的转换
- 干货 | 深度剖析C语言的main函数
- linux location root访问文件夹404_如何使网站支持https访问?nginx配置https证书
- android glu,我可以使用glu与Android NDK
- linux la 的使用方法,Linux简介及常用命令使用4--linux高级命令与技巧(示例代码)
- c++ primer 5th(中文版)勘误
- 牛客第三场多校 H Diff-prime Pairs
- dom4j处理XML的一些经验
- 《中文分词算法研究》
- 挑战程序设计竞赛:Ants
- 自定义Teams会议录像提示
- 扔掉你 Windows 操作系统中的盗版软件吧
- 无心剑中译拜伦诗4首
- Day001--Scala中的下载安装配置及下载安装集成开发环境IDEA
- 将两个各有n个元素的有序表归并成一个有序表,其最多的比较次数
- 开发问题解决之IDEA无故显示红色
- gpfdist故障诊断
- Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/account
- CEC 2021基准测试集