MATLAB中bsxfun、repmat、cat函数分析

bsxfub\repmat函数分析

bsxfun

  1. 功能:对两个不同维度的数组进行逐像素运算操作。逐个点一一对应地进行运算操作。

  2. 执行情况:如果A和B的维度相同,那么C =A+B。但若其维度不同,A\B必须有一个其维度为1,并且使为1 的维度扩展到和两位一个矩阵维度一样的情况,再进行计算。

  3. 函数描述:C=bsxfun(fun,A,B).
    C:得到的矩阵
    A\B:参与运算的矩阵
    fun:可为函数句柄、内置运算、m.文件
    内置句柄:@plus 加、@minus 减、@times 数组乘、@rdivide 左除、@idivide 右除、@power 幂运算

  4. 举例

情况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]

猜你喜欢

转载自blog.csdn.net/qq_40797015/article/details/105306399