res = A ./ B
Run Code Online (Sandbox Code Playgroud)
我试过了,
res = [1 2] ./ [1 2]
res = [1 2] ./ [1 2; 2 3]
res = [1 2] ./ [1 2; 2 3; 3 4]
res = [1 2; 2 3] ./ [1 2; 2 3]
Run Code Online (Sandbox Code Playgroud)
所有这些都有效.
但是,以下不起作用,
res = [1 2; 2 3] ./ [1 2; 2 3; 3 4]
Run Code Online (Sandbox Code Playgroud)
那么,维度的规则实际上是什么?
由于MATLAB的新自动尺寸广播,这引起了一些混乱.
首先,请注意./运算符是元素操作.
在R2016b之前的MATLAB版本中,使用此运算符将要求两个输入具有完全相同的维度.
[1 2] ./ rand(4)
Run Code Online (Sandbox Code Playgroud)
矩阵尺寸必须一致.
如果您想将此元素操作应用于矩阵中的多个列(如您在第二个示例中所示),则必须使用 bsxfun
bsxfun(@rdivide, [1 2], [1 2; 2 3]);
Run Code Online (Sandbox Code Playgroud)
规则是两个输入的非单一维度必须匹配.
两个输入数组的非单一维度必须相互匹配.
因此,在上面的示例中,第一个数组具有第一维1和第二维2.第二输入具有第一维度2和第二维度,2因此满足该标准.
在R2016b中,MATLAB引入了尺寸的自动广播,其效果与bsxfun现在内置于运营商中的效果相同.执行操作需要相同的标准
在你失败的例子中
[1 2; 2 3] ./ [1 2; 2 3; 3 4]
Run Code Online (Sandbox Code Playgroud)
第一个输入[2 x 2]的大小是,第二个输入的大小是[3 x 2].在这种情况下,第一个输入维度不匹配,因此操作失败.