Matlab bsxfun函数解析

来源:互联网 发布:小学生 口语 打卡软件 编辑:程序博客网 时间:2024/05/17 07:39
bsxfun是一个matlab自版本R2007a来就提供的一个函数,作用是”applies an element-by-element binary operation to arrays a and b, with singleton expansion enabled。

bsxfun的执行效果是这样的,以两个变量a+b为例,如果a和b的各维度大小相同,那么c=a+b. 但如果有某维大小不同,且a或b必须有一个在这一维度的大小为1, 那么bsxfun就将维度大小为一的这个虚拟的复制一些来使与多的维数大小一样。

举例:

>> a = randn(3,1), b = randn(1,3)a =    0.5377    1.8339   -2.2588b =    0.8622    0.3188   -1.3077>> bsxfun(@plus,a,b)ans =    1.3998    0.8564   -0.7700    2.6961    2.1527    0.5262   -1.3967   -1.9401   -3.5665>> a = randn(4,3), b = randn(1,3)a =   -0.4336   -1.3499    0.7147    0.3426    3.0349   -0.2050    3.5784    0.7254   -0.1241    2.7694   -0.0631    1.4897b =    1.4090    1.4172    0.6715>> bsxfun(@plus,a,b)ans =    0.9754    0.0673    1.3862    1.7517    4.4521    0.4665    4.9874    2.1426    0.5474    4.1785    1.3541    2.1612>> a = randn(4,3), b = randn(2,3)a =   -1.2075    1.0347   -0.7873    0.7172    0.7269    0.8884    1.6302   -0.3034   -1.1471    0.4889    0.2939   -1.0689b =   -0.8095    1.4384   -0.7549   -2.9443    0.3252    1.3703>> bsxfun(@plus,a,b)Error using <u>bsxfun</u>Non-singleton dimensions of the two input arrays must match each other. >> 

以上操作也可以通过repmat函数来进行事先,但是repmat函数会复制矩阵,增加了额外的内存和时间。bsxfun是虚拟的复制,实际上通过for来实现,但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/hxsyl/p/4429316.html

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

0 0
原创粉丝点击