为了使用逐元素划分,矩阵的维数必须是多少?

use*_*312 4 matlab matrix

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)

那么,维度的规则实际上是什么?

Sue*_*ver 6

由于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].在这种情况下,第一个输入维度不匹配,因此操作失败.