【问题标题】:Normalize length of cell array标准化元胞数组的长度
【发布时间】:2012-10-30 12:09:10
【问题描述】:

我有一个长度为 3 的单元格数组,我想用另一个长度为 6 的单元格数组创建一个 for 循环,那么如何为第一个数组添加额外的 3 个单元格以使 2单元格数组等于并在 MATLAB 中使用我的 for 循环?

例如,有 2 个输入:

type = { '12' '62' '5' };
colour = {'re' 'green' 'yellow' 'brown' 'blue' 'black'};

for i = 1:length(colour)
    if isequal(colour(i), type(:))
        result(i) = type(i);
    else
    end
end

我需要使type 单元格数组的大小与colour 单元格数组的大小相同(我想我必须在type 单元格数组中添加额外的3 个空单元格)。

【问题讨论】:

  • 能否请您提供一些代码、您的输入和所需的输出?
  • 请检查上面编辑过的问题... :)
  • 我有一种强烈的预感,这是XY problem 的经典案例。请告诉我们您的最终目标是什么?
  • 我想我自己找到了答案:type=[type cell(length(color)-length(type))]..无论如何谢谢你:):)

标签: matlab cell-array


【解决方案1】:

我必须先解决您代码中的几个问题:

  1. 如果使用元胞数组,则必须使用大括号 ({}) 从中提取元素。而不是写colour(i),你应该写colour{i}

  2. 这不是问题,但这是一个良好实践的问题。如果您不需要处理if 语句的else 部分,则根本不要编写它。

  3. 预先分配内存,这样数组就不会在循环内增长(它会减慢程序的速度)。具体来说,在 for 循环之前添加行 result = cell(size(colour));

  4. 您的isequal 逻辑有缺陷。实际上,它总是会返回 false,因为 colour{1} 是一个元素,type{:} 是多个元素。

  5. 根据您的示例,types 包含数字和 colours 字母,尽管它们都是字符串。比较两者有意义吗?

现在,关于您的问题,由您决定for 循环的运行方式。由于您没有提及您想要实现的目标(您宁愿问您想如何实现目标而不说具体是什么),如果有必要的话,我无法说出您的 for 循环应该是什么样子。也许您打算使用ismember 而不是isequal?如果是这样,固定的代码可以是这样的:

result = cell(size(colour));
for i = 1:length(colour)
    if ismember(colour{i}, type)
        result{i} = type{i};
    end
end

或更短,像这样:

result = cell(size(colour));
[found, idx] = ismember(colour, type);
result(found) = type{idx(found)}

如果您提供更多详细信息,也许我可以完善我的答案,以便对您有更多帮助。

【讨论】:

    猜你喜欢
    • 2019-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-27
    • 2011-03-10
    • 1970-01-01
    相关资源
    最近更新 更多