matlab学习笔记 bsxfun函数
来源:互联网 发布:久其软件啥时复牌 编辑:程序博客网 时间:2024/05/17 03:48
最近总是遇到 bsxfun这个函数,前几次因为无关紧要只是大概看了一下函数体去对比结果,今天再一次遇见了这个函数,想想还是有必要掌握的,遂查了些资料总结如下。
函数bsxfun
【功能描述】两个数组间元素逐个计算.
【应用场合】当我们想对一个矩阵A的每一列或者每一行与同一个长度相等的向量a进行某些操作(比较大小,乘除等)时,我们只能用循环方法或者利用repmat函数将要操作的向量a复制成和A一样尺寸的矩阵,进而进行操作。从MATLAB R2007a开始,再遇到类似的问题时,我们有了简洁高效的方法,即利用bsxfun函数。
【函数描述】C=bsxfun(fun,A,B):两个数组间元素逐个计算,fun是函数句柄或者m文件,也可以为如下内置函数 :
@plus 加 ;
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.0709b = -0.3552 0.9559 0.1593
我们可以很简单的使用matlab的外乘来得到c=a*b,
c = a * bc = -0.2670 0.7184 0.1197 0.3068 -0.8256 -0.1376 0.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); endend
但bsxfun不会有使用matlab的for所带来额外时间。实际验证下这三种方式:
>> 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); end end>> c c = 0.3609 0.3202 0.6604 0.3296 0.2889 0.6291 0.4149 0.3742 0.7144从计算时间上来说前两种实现差不多,远高于for的实现。但如果数据很大,第二种实现可能会有内存上的问题。所以bsxfun最好。
参考:http://blog.sina.com.cn/s/blog_9e67285801010ttn.html
http://blog.sina.com.cn/s/blog_6ca002a50100wvu1.html
0 0
- matlab学习笔记 bsxfun函数
- matlab学习笔记 bsxfun函数
- matlab学习笔记 函数bsxfun repmat
- matlab函数 bsxfun浅谈
- matlab函数 bsxfun浅谈
- matlab函数 bsxfun浅谈
- matlab函数 bsxfun
- matlab函数 bsxfun浅谈
- Matlab bsxfun函数解析
- matlab中 bsxfun函数
- matlab之bsxfun函数
- matlab函数之bsxfun
- Matlab的bsxfun函数
- Matlab bsxfun函数
- bsxfun函数-matlab
- matlab函数之bsxfun
- MATLAB中的bsxfun函数
- matlab函数bsxfun的用法
- 基于标签方式的工作流启动及任务执行开发说明
- 我无法忍受失去(拖延症)
- fedora20安装putty No package ‘gtk+-2.0′ found
- 国有航空为啥“放下身段”读春秋?
- android binder解析
- matlab学习笔记 bsxfun函数
- SQL Server 2008 R2 sa登录密码忘记
- The prefix "tx" for element "tx:advice" is not bound.
- js select 增加option
- HTK关于HHEd的错误
- DotSpatial快速入门
- 小米1出现的资源文件找不到问题!
- imageview画圆
- 经典Hadoop家族系列文章