将不同大小的行/列追加到数组。

时间:2018-11-23 10:16:00

标签: matlab

最近,我在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);

将数组调整为最大列大小,并将零添加到较短的列上。

我的问题是:为什么前一个代码片段不执行后者的功能(在我看来这很合逻辑)?对于以前的代码片段为什么应该如此工作,我没有任何理由。还是我错过了什么?

1 个答案:

答案 0 :(得分:2)

对于a(2,:) = rand(5,1);,您试图将5x1向量分配给4x1矩阵列。因此是错误。

使用a(2,1:5) = rand(5,1);,您显式地引用了第五行,该行告诉Matlab引擎在尝试分配操作之前相应地扩展矩阵。因此,这将成功。

我的看法是,尝试将5个值放入4行向量中可能是由于代码中的错误,因此用户必须明确声明这是他打算执行的操作。当然,我只能推断当Mathworks开发人员指定其语言行为时的意图。