【问题标题】:Make a MatLab table out of 2 Cell Array用 2 个元胞数组制作一个 MatLab 表
【发布时间】:2016-02-15 04:19:08
【问题描述】:

从 2 个元胞数组生成表格的最有效方法是什么。数组 A 包含数据,数组 B 包含相应的名称。我想将它们组合成一个方便的表结构。

Cell_Array_A =
{[10x10],[10x10],[];
 [10x11],[],[10x12];
 [9x10],[13x10],[]}

Cell_Array_B = 
{['A','B',[];
 'B',[],'A';
 'B','A',[]}

它应该生成一个带有标题“A”和“B”的表格。但是,在我的真实数据集中,我有很多我不知道的变量名。所以我需要一种从第一行读取所有变量并使用它们为矩阵的其余部分创建表的方法。

所需输出的示例:

'A' 'B'
[10x10] [10x10]
[10x12] [10x11]
[13x10] [9x10]

到目前为止,我尝试按行处理数组以摆脱空数组。然而,这不是很有效。我为数组 A 和 B 中的每一行运行以下代码。下面是数组 A 中第一行的示例,稍后我将其用作我的表格的平板电脑。

order_row = {};
order_row = Cell_Array_A(1,:);
ordered_filenames = order_row(~cellfun('isempty',order_row));

【问题讨论】:

  • 在这个例子中,期望的输出是什么?
  • 也贴出低效的代码
  • 我添加了相应的所需表结构。

标签: matlab matrix


【解决方案1】:

已编辑答案 思路是 1)收集非空的列标题,2)为每个唯一的列标题收集相应的值:

    % Unique variable names
    nul_names = cellfun(@isempty,Cell_Array_B);
    var_names = unique(Cell_Array_B(~nul_names));

    % Function to find a column header index
    ixhead = @(h,c) cellfun(@(x) isequaln(x,h), c(:));

    % Collect the values
    var_values = cellfun( ...
       @(h) Cell_Array_A(ixhead(h, Cell_Array_B)), var_names, ...
       'UniformOutput', false ...
    );

    % Create the table
    tbl = table(var_values{:}, 'VariableNames', var_names);

【讨论】:

  • 是的,没错!数组 A 包含数据,数组 B 包含相应的名称。如果您不知道名称并且想从数组 B 的第一行检索它们,您将如何解决这个问题?
  • 这是一个不同的问题。请相应地更新您的问题,我会更新答案。
  • 我更新了问题。您之前的回答非常好,并且添加更多未知变量的可能性将使这广泛适用。
  • @C.Colden 抱歉,我现在有点忙,我会在 1 小时后回复。
  • @C.Colden 答案已更新。我希望它适合您的需求。不是最有效的(主要是由于第二个单元格数组中存在[]
猜你喜欢
  • 2011-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-26
  • 1970-01-01
相关资源
最近更新 更多