Hen*_*e96 1 matlab matrix octave dimensions
我试图在Octave中运行MATLAB代码,但在以下方面陷入困境:
I 是一个空矩阵,尺寸为0x4,
a = 2;
Run Code Online (Sandbox Code Playgroud)
属于for循环的命令是:
I = [I a];
Run Code Online (Sandbox Code Playgroud)
MATLAB输出: I = 2
八度输出:"水平尺寸不匹配(0x4 vs 1x1)"
我找到了解决此错误的方法,但我也想了解:为什么MATLAB接受这些不同的维度而Octave会输出错误?是否有关于空矩阵的不同定义并扩展它们?(特别是因为它不是"普通"空矩阵而是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
Run Code Online (Sandbox Code Playgroud)
Octave上的相同代码:
>> I = magic(4);
>> I(1:4,:)=[]
I = [](0x4)
>> [I 2]
error: horizontal dimensions mismatch (0x4 vs 1x1)
Run Code Online (Sandbox Code Playgroud)
所以基本上它是同样的问题,除了Matlab允许它暂时发出警告,并且关于哪个维度实际上在这里有错误的信息略多,而八度更严格,希望你弄清楚它的含义.但实质上行为是一样的.
这也是非常合理的行为,因为尝试连接两个不同大小/维度的矩阵更可能来自错误而不是预期的行为,即使其中一个数组在此过程中变空,所以matlab是明智的在这里沿着八度音程走(可以这么说).
[I;2 2 2 2]两个解释器上的完全有效和正确的代码:即,您将4列矩阵与一行垂直连接到没有行的4列矩阵,因此列数是一致的.