【问题标题】:Convert struct to matrix MATLAB将结构转换为矩阵 MATLAB
【发布时间】:2023-09-11 14:00:01
【问题描述】:

有没有办法将结构(2 个字段,每个字段 52 个变量)转换为矩阵(2x52)?谢谢

struct:

    sym (1x53)
    prob (1x53)

我尝试了以下方法,它给了我一个 1 x 1 单元格数组

symProb = reshape({x.sym}, size(53)); 

我也尝试过struct2cell,它也是如此。

【问题讨论】:

  • 您能提供带有这些变量的结构的实际示例吗?

标签: matlab matrix struct matlab-struct


【解决方案1】:

可能最简单的事情(因为它只有两个字段)是使用cat 沿第一个维度简单地连接它们

result = cat(1, x.sym, x.prob);

或者你可以只使用[];

result = [x.sym; x.prob]

如果您想要更通用的解决方案,您可以使用 struct2array 进行一些整形

result = reshape(struct2array(x), [], numel(x)).';

请注意,所有这些都假定symprob 中的数据实际上是相同的数据类型,因此可以放置在同一个数组中,否则元胞数组是保存这两个字段的唯一方法。

此外,您的代码会生成一个 1 x 1 单元格数组,因为您将数据 x.sym inside 包装在 1 x 1 单元格数组中。

【讨论】:

    【解决方案2】:

    另一种方法如下:

    symVec = [x.sym(:)]
    probVec = [x.prob(:)
    

    【讨论】:

      【解决方案3】:

      你可以用这个:

      cell2mat(struct2cell(YourStructure))
      

      【讨论】: