最近,我在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);
将数组调整为最大列大小,并将零附加到较短的列上。
我的问题是:为什么前一个代码片段不能像后一个那样做(这在我看来非常合乎逻辑(?我看不出有任何理由解释为什么前一个代码片段应该以这种方式工作。还是我错过了什么?
使用a(2,:) = rand(5,1);
,您正试图将5x1向量分配给4x1矩阵列。因此出现了错误。
使用a(2,1:5) = rand(5,1);
,您显式引用第5行,这告诉Matlab引擎在尝试赋值操作之前相应地扩展矩阵。因此,这将取得成功。
在我看来,试图将5个值放入4行向量中可能是由于代码中的错误,因此用户必须明确声明这是他想要做的。当然,我只能根据Mathworks开发人员指定语言行为时的意图进行推断。