为什么 Octave 打印 "dimensions mismatch" 而 MATLAB 不打印?

Why does Octave print "dimensions mismatch" whereas MATLAB does not?

我正在尝试 运行 Octave 中的 MATLAB 代码,但卡在了以下位置:

I 是一个空矩阵,尺寸为 0x4,

a = 2;

属于for循环的命令是:

I = [I a];

MATLAB 输出:I = 2

倍频程输出:"horizontal dimensions mismatch (0x4 vs 1x1)"

我找到了解决此错误的方法,但我还想了解:为什么 MATLAB 接受这些不同的维度,而 Octave 却打印错误? 关于空矩阵和扩展它们是否有不同的定义? (特别是因为它不是"normal"空矩阵而是0x4空矩阵?)

Matlab 发出警告,提醒您这将成为未来版本中的错误:

>> I = magic(4);
>> I(1:4,:) = []
I =
   Empty matrix: 0-by-4
>> [I 2]
Warning: This concatenation operation includes an empty array with an incorrect number of rows.
Concatenation including empty arrays will require all arrays to have the same number of rows in a future release. 

ans =
 2

Octave 上的相同代码:

>> I = magic(4);
>> I(1:4,:)=[]
I = [](0x4)

>> [I 2]
error: horizontal dimensions mismatch (0x4 vs 1x1)

所以本质上这是同一个问题,除了 Matlab 暂时允许它并发出警告,并且对于这里实际上是哪个维度有问题提供了更多信息,而 Octave 对此更严格,希望你能理解出来是什么意思。但本质上行为是相同的。

这也是非常合理的行为,因为尝试连接两个不同大小/维度的矩阵更可能来自错误而不是预期行为,即使其中一个数组在此过程中变空,所以 matlab 在这里沿着八度路径走下去是明智的(可以这么说)。


PS。请注意,在这种情况下,[I;2 2 2 2] 之类的代码在两个解释器上都是完全有效且正确的代码:即您正在 垂直 连接一个 4 列矩阵,一行到 4 - 没有行的列矩阵,因此列数是一致的。