标签:
关于matlab函数 bsxfun
本文来源:http://blog.sina.com.cn/s/blog_9e67285801010ttn.html
a=[1 2 3];
b=[1 2 3]‘;
c=bsxfun(@plus,a,b)
c =
2 3 4
3 4 5
4 5 6
相当于:1 2 3 1 1 1
1 2 3 + 2 2 2
1 2 3 3 3 3
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所带来额外时间。
C = bsxfun(fun,A,B) appliesthe element-by-element binary operation specified by the functionhandlefun to arrays A and B,with singleton expansion enabled.fun can be oneof the following built-in functions:
@plus |
Plus |
@minus |
Minus |
@times |
Array multiply |
@rdivide |
Right array divide |
@ldivide |
Left array divide |
@power |
Array power |
@max |
Binary maximum |
@min |
Binary minimum |
@rem |
Remainder after division |
@mod |
Modulus after division |
@atan2 |
Four quadrant inverse tangent |
@hypot |
Square root of sum of squares |
@eq |
Equal |
@ne |
Not equal |
@lt |
Less than |
@le |
Less than or equal to |
@gt |
Greater than |
@ge |
Greater than or equal to |
@and |
Element-wise logical AND |
@or |
Element-wise logical OR |
@xor |
Logical exclusive OR |
标签:
原文地址:http://www.cnblogs.com/YQfeng/p/4776691.html