最近,我在Matlab
中遇到了这种行为,我很想知道为什么会这样。
a(1,:) = rand(4,1);
a(2,:) = rand(5,1);
这会引发我Subscripted assignment dimension mismatch.
错误,而
a(1,:) = rand(4,1);
a(2,1:5) = rand(5,1);
将数组调整为最大列大小,并将零添加到较短的列上。
我的问题是:为什么前一个代码片段不执行后者的功能(在我看来这很合逻辑)?对于以前的代码片段为什么应该如此工作,我没有任何理由。还是我错过了什么?
答案 0 :(得分:2)
对于a(2,:) = rand(5,1);
,您试图将5x1向量分配给4x1矩阵列。因此是错误。
使用a(2,1:5) = rand(5,1);
,您显式地引用了第五行,该行告诉Matlab引擎在尝试分配操作之前相应地扩展矩阵。因此,这将成功。
我的看法是,尝试将5个值放入4行向量中可能是由于代码中的错误,因此用户必须明确声明这是他打算执行的操作。当然,我只能推断当Mathworks开发人员指定其语言行为时的意图。