赞
踩
bsxfun
两个数组间元素逐个计算.
语法:
C=bsxfun(fun,A,B)
函数描述:
两个数组间元素逐个计算,fun是函数句柄或者m文件,也可以为如下内置函数
@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
当我们想对一个矩阵A的每一列或者每一行与同一个长度相等的向量a进行某些操作(比较大小,乘除等)时,我们只能用循环方法或者利用repmat函数将要操作的向量a复制成和A一样尺寸的矩阵,进而进行操作。
举例:
1、利用bsxfun函数使矩阵A的每个元素减去所在列的均值
>> A=[1 2 5;3 5 6;2 8 7];
>> C=bsxfun(@minus,A,mean(A))
C =
-1 -3 -1
1 0 0
0 3 1
>> A = [1,2,3;4,5,6;7,8,9];
>> C = bsxfun(@times,A,[1 2 4])
C =
1 4 12
4 10 24
7 16 36
>> A=rand(3,1)
A =
0.9549
0.0380
0.9789
>> B=rand(1,3)
B =
0.7888 0.9839 0.5633
>> C=bsxfun(@plus,A,B)
C =
1.7436 1.9387 1.5182
0.8268 1.0219 0.6013
1.7677 1.9628 1.5423
这里bsxfun是这样执行的,如果A和B的大小相同,那么C=A+B。 但如果有某维不同,且A或B必须有一个在这一维的维数为1, 那么bsxfun就将少的这个虚拟的复制一些来使与多的维数一样。在我们这里,b的第一维只有1(只一行),所以bsxfun将b复制3次形成一个3×3的矩阵,同样也将a复制成3×3的矩阵。
即A会复制成
0.9549 0.9549 0.9549
0.0380 0.0380 0.0380
0.9789 0.9789 0.9789
B会复制成
0.7888 0.9839 0.5633
0.7888 0.9839 0.5633
0.7888 0.9839 0.5633
最后将以上两个复制后的矩阵相加得到C。
这个等价于C=repmat(A,1,3)+repmat(B,3,1)。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。