【问题标题】:cell array issue - Matlab元胞数组问题 - Matlab
【发布时间】:2015-11-23 10:50:08
【问题描述】:

在循环中,我正在生成一个输出(例如 outputLine),我希望将其累积/添加到一个元胞数组中。

所以,我用的是这个小sn-p:

for...
    outputLine=strcat(FileName,',',coordString);
    outputTable=vertcat(outputTable,outputLine);
end

我得到一个明显的错误,因为 outputTable 没有声明,如果我在脚本的开头添加outputTable=' ';

我收到此错误“连接的矩阵的维度不一致。”

如何在元胞数组中累积输出?

【问题讨论】:

  • 在循环之前尝试outputTable={}。此外,您可以将vertcat 替换为{;},例如outputTable={outputTable;outputLine};
  • 谢谢。 outputTable={} 工作正常,但仅适用于 vertcat。
  • 要连接两个单元格,必须使用 [],{} 创建一个嵌套单元格。
  • 在这种情况下,我会使用 append : outTable{end+1}=outputLine

标签: matlab


【解决方案1】:

您收到错误的原因是字符串是char 类型的数组。如果您想垂直连接字符串,它们必须具有相同的长度才能构成一个正确的char 矩阵,就像任何其他类型的数组一样。

您可能想阅读 how to index cell arrayshow to combine cell arrays 上的 Mathworks 页面。

有几种方法可以附加到元胞数组。首先,必须将数组定义为元胞数组。如果你知道它有多大(这是最好的情况),在循环之前,做

outputTable = cell(N, 1);

否则,您每次都必须重新分配数组

outputTable = {}

对于已知大小的情况,

outputTable{i} = outputLine;

这里的i 将是for 循环中的索引或您在循环之前初始化并在您进行分配时递增的外部计数器。这个will also work 如果你事先不知道列表的大小,但效率不高。

如果您只想追加到列表中,请执行

outputTable = [outputTable; outputLine]

The notation [;] is syntactic sugar 代表vertcat,您可以明确使用:

outputTable = vertcat(outputTable, outputLine)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-03
    • 2014-06-22
    • 2013-08-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多