bsxfun函数功能:矩阵A的每个元素针对矩阵B的运算。
- 调用格式
C = bsxfun(fun,A,B)
fun为以下函数:
- 实例1:矩阵A的每列元素减去该列的平均值。
一般做法,先求A的平均值,得到的结果是1*3的矩阵(按列求平均值),然后将得到的结果进行扩充,即将一行复制成三行使得维度和A保持一致,最后做减法运算。
A = [1 2 10; 1 4 20; 1 6 15]
B = A - repmat(mean(A), 3, 1)
B =
0 -2 -5
0 0 5
0 2 0
使用bsxfun函数也能得到相同的结果。
C = bsxfun(@minus, A, mean(A))
C =
0 -2 -5
0 0 5
0 2 0
- 实例2:矩阵A和矩阵B之间的减法运算(至少保证B的行数或者列数有一个和A相同)
A的列=B的列,则A的每列元素减去B的该列元素值;
A的行=B的行,则A的每行元素减去B的该行元素值;
A和B维度一致,则按照A-B进行运算。
A = [1 2 10; 1 4 20;1 6 15]
B = mean(A)
C = [0 -2 -5; 0 0 5; 0 2 0]
bsxfun(@minus, A, B)
bsxfun(@minus, A, B')
bsxfun(@minus, A, C)
A =
1 2 10
1 4 20
1 6 15
B =
1 4 15
C =
0 -2 -5
0 0 5
0 2 0
ans =
0 -2 -5
0 0 5
0 2 0
ans =
0 1 9
-3 0 16
-14 -9 0
ans =
1 4 15
1 4 15
1 4 15