为什么Octave打印“尺寸不匹配”而MATLAB不打印?

时间:2016-09-16 07:52:06

标签: matlab matrix octave dimensions

我正在尝试在Octave中运行MATLAB代码,但在以下方面陷入困境:

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

a = 2;

属于for循环的命令是:

I = [I a];

MATLAB输出:I = 2

Octave输出:“水平尺寸不匹配(0x4 vs 1x1)”

我找到了解决此错误的方法,但我也想了解:为什么MATLAB接受这些不同的维度,而Octave会输出错误? 是否有关于空矩阵的不同定义并扩展它们? (特别是因为它不是“普通”空矩阵而是0x4空矩阵?)

1 个答案:

答案 0 :(得分:7)

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允许它暂时发出警告,并且稍微提供更多信息,关于哪个维度实际上是错误的,而八度是更严格的,并希望你弄清楚是什么这意味着 。但实际上行为是一样的。

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

<小时/> PS。请注意,在这种情况下,像[I;2 2 2 2]这样的东西在两个解释器上都是完全有效和正确的代码:即,您将垂直一个4列矩阵与一行连接到一个4列矩阵没有行,因此列数是一致的。

相关问题