【问题标题】:MATLAB Using colon operator with cell assignmentMATLAB 使用带有单元格分配的冒号运算符
【发布时间】:2015-09-04 09:52:05
【问题描述】:
我有以下代码行将单元格数组的第一列设置为 false,以便它可以用于 uitable 中的复选框:
result{:,1} = false;
它按预期运行了很多次,但似乎随机抛出了这个错误:
The right hand side of this assignment has too few values
to satisfy the left hand side.
我最终将行改为:
result(:,1) = {false};
它似乎和以前一样工作。
第一种方法不起作用有什么原因吗?或者它会工作一段时间然后停止的任何原因?
【问题讨论】:
标签:
arrays
matlab
cell-array
【解决方案1】:
你原来的行
result{:,1} = false;
如果result 有一行,则有效,但如果它有几行,则无效。所以我的猜测是它最初工作是因为result 有一行,但因为result 获得了新行而停止工作。
为什么会这样?
如果result为单行,则result{:,1} = false;语句与result{1,1} = false;相同,即“将result左上单元格的内容设置为false em>”,这很好。但是,如果result 有n 行,则语句result{:,1} = false; 的左侧是comma-separated list 的n 单元格的内容。 您不能将单个值分配给多个单元格的内容。 Matlab 不会自动复制该值并将其作为所有单元格的内容。
一种解决方案是告诉 Matlab 使用 deal 进行复制(它有效地将该值“处理”给所有左侧“接收器”):
result{:,1} = deal(false);
当然,如果只有一行,这也可以。
另一种可能性是像你一样使用,
result(:,1) = {false};
这意味着“使result 的第一列中的所有单元格都等于包含false 的单元格”。请注意与前一种情况的区别:现在我们将一个 cell 分配给多个 cells。 Matlab 对此很满意,并自动复制了右侧的单元格。同样,这也适用于作为特定情况的单行。