习惯了python里的broadcast机制后再来使用matlab要小心。特别是除法。在python中声明一个[2,10]的矩阵a除以[1,10]的矩阵b,后者会在长度为1的维度上进行broadcast,复制到满足按元素除法的长度,最后b变成[2,10],并得到一个[2,10]的结果。如下图所示:
>>> a=np.ones((2,10))
>>> a
array([[1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]])
>>> b=np.ones((1,10))
>>> a/b
array([[1., 1., 1., 1., 1., 1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]])
对于matlab而言则有所不同。直接使用/默认使用矩阵除法。必须使用./才能引起broadcast机制。如下图所示:
>> a=ones(2,10),b=ones(1,10),a/b
a =
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
b =
1 1 1 1 1 1 1 1 1 1
ans =
1.0000
1.0000
>> a=ones(2,10),b=ones(1,10),a./b
a =
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
b =
1 1 1 1 1 1 1 1 1 1
ans =
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
对于加、减、乘运算则无此问题。
搬运一个更详细的介绍:
https://blog.youkuaiyun.com/lanchunhui/article/details/50158975