bsxfub\repmat函数分析
bsxfun
-
功能:对两个不同维度的数组进行逐像素运算操作。逐个点一一对应地进行运算操作。
-
执行情况:如果A和B的维度相同,那么C =A+B。但若其维度不同,A\B必须有一个其维度为1,并且使为1 的维度扩展到和两位一个矩阵维度一样的情况,再进行计算。
-
函数描述:C=bsxfun(fun,A,B).
C:得到的矩阵
A\B:参与运算的矩阵
fun:可为函数句柄、内置运算、m.文件
内置句柄:@plus 加、@minus 减、@times 数组乘、@rdivide 左除、@idivide 右除、@power 幂运算 -
举例:
情况1:A:m * n, B:1 * n。对B这一行向量进行复制扩展。然后,对应位置的元素逐个做运算。
A = [1 2 3; 4 5 6; 7 8 9];
B = [1,2,3];
C = bsxfun(@times,A,B)
C=[ 1 4 9
4 10 18
7 16 27]
% B复制为[1 2 3;1 2 3;1 2 3]
情况2:A:1 * n; B: m* 1。对A这一行矩阵进行行复制为三行,对B这一列向量的进行列复制为三列。
A = [1 2 3]; %行矩阵
B = [3 ;2; 1] %列矩阵
C =bsxfun(@plus , A , B)
C =[ 4 5 6
3 4 5
2 3 4]
%A扩展为[1 2 3;1 2 3;1 2 3],B扩展为[3 3 3;2 2 2;1 1 1]
repmat—复制和平铺矩阵
- B = repmat(A,m,n) %将矩阵A复制m×n块,即B由m×n块A平铺而成。
- B = repmat(A,[m n]) %与上面一致
- B = repmat(A,[m n p…]) %B由m×n×p×…个A块平铺而成
- repmat(A,m,n) %当A是一个数a时,该命令产生一个全由a组成的m×n矩阵。
情况2:若此处用repmat:
A = [1 2 3]; %行矩阵
B = [3 ;2; 1] %列矩阵
a = repmat(A,3,1);
b = repmat(B,1,3);
c = a+b;
c =[ 4 5 6
3 4 5
2 3 4]