MATLAB使用冒号运算符和单元格分配

时间:2015-09-04 09:52:05

标签: arrays matlab cell-array

我有以下代码行将单元格数组的第一列设置为false,因此它可以用于合适的复选框:

result{:,1} = false;

它按预期运行了很多次,但似乎随机地抛出了这个错误:

The right hand side of this assignment has too few values
to satisfy the left hand side.

我最后将线路更改为:

result(:,1) = {false};

它似乎和以前一样。

有没有理由说第一种方式不起作用?或者为什么它会工作一段时间然后停止的任何原因?

1 个答案:

答案 0 :(得分:2)

你原来的行

result{:,1} = false;
如果result有一行,

将起作用,但如果有几行则不行。所以我的猜测是最初有效,因为result有一行,但由于result获得了新行而停止了工作。

为什么会这样?

如果result只有一行,则result{:,1} = false;语句与result{1,1} = false;相同,即“设置左上角单元格的内容{{1 } result “,这很好。但是,如果falseresult行,则语句n的左侧是result{:,1} = false;个单元格内容的comma-separated list您无法将单个分配给多个单元格的内容 。 Matlab不会自动复制该值并将其作为所有这些单元格的内容。

一个解决方案是告诉Matlab使用deal进行复制(这有效地将该值“交易”给所有左侧“接收者”):

n

当然,如果只有一行,这也有效。

另一种可能性就是像你一样使用

    result{:,1} = deal(false);

这意味着“使 result(:,1) = {false}; 的第一列中的所有单元格等于包含result ”的单元格。请注意与前一种情况的区别:现在我们单元分配给多个单元 。 Matlab对此很满意,并自动复制右手单元格。同样,这也适用于单行作为特定情况。