【问题标题】: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>”,这很好。但是,如果resultn 行,则语句result{:,1} = false; 的左侧是comma-separated listn 单元格的内容。 您不能将单个分配给多个单元格的内容。 Matlab 不会自动复制该值并将其作为所有单元格的内容。

一种解决方案是告诉 Matlab 使用 deal 进行复制(它有效地将该值“处理”给所有左侧“接收器”):

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

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

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

    result(:,1) = {false};

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多