Matlab Automatic Broadcasting Operation Applied

在使用 Matlab 做 machine learning 练习时,将两个不同维度的矩阵相减,结果正确但出现了如下的警告:

1
warning: operator -: automatic broadcasting operation applied

出现此警告的根源在于两个矩阵的维度不一致。

但,我们知道,在Matlab中一个矩阵与一个实数进行四则运算,实际上是对矩阵的没一个矩阵元做相应的运算。那么,是否可以对此规则进行推广呢?比如,一个$M \times N$ 的矩阵 A 减去一个 $1 \times N$ 的向量 b,就相当于用 A 的每一行与 b 相减,它们之间维度一致,可以进行计算,结果也符合我们的期望。 For example,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
octave:3> a
a =

1 3
1 3
1 3
1 3
1 3
octave:4> a - [1 2]
warning: operator -: automatic broadcasting operation applied
ans =

0 1
0 1
0 1
0 1
0 1

应该如何避免警告信息呢? Google 了一番之后,在 stackoverflow.com 上发现同样的问题。Matlab 内置函数 bsxfun or repmat 可以解决这个问题。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
octave:5> a - repmat([1 2], 5, 1)
ans =

0 1
0 1
0 1
0 1
0 1

octave:6> bsxfun(@minus, a, [1 2])
ans =

0 1
0 1
0 1
0 1
0 1

bsxfunrepmat 的具体用法,可以查阅文档,故不在此赘述。