数组结构的数组。 MATLAB

时间:2016-03-04 18:38:40

标签: arrays matlab matlab-struct

我有三个向量centers, radiuses, metrics所有Nx1(centers都是Nx2,但它根本不是问题)。我想将它们转换为结构的向量Nx1,其中每个结构都有字段center, radius, metric和此字段的相应值,如structArray(i).metric == metrics(i)。什么是最好和最简单的方法?

2 个答案:

答案 0 :(得分:2)

您可以通过将数据转换为单元格数组直接使用struct构造函数。

structArray = struct('center', num2cell(centers,2), ...
                     'radius', num2cell(radiuses), ...
                     'metric', num2cell(metrics));

请注意使用num2cell的维度输入将centers变量转换为1x2单元格的Nx1数组。

如果我们尝试使用一些示例数据:

radiuses = rand(3,1);
metrics = rand(3,1);
centers = rand(3,2);

structArray = struct('center', num2cell(centers,2), ...
                     'radius', num2cell(radiuses), ...
                     'metric', num2cell(metrics));

structArray =

3x1 struct array with fields:

    center
    radius
    metric

答案 1 :(得分:1)

使用以下内容:

 S = struct( 'centers', num2cell(centers), 'radiuses', num2cell(radiuses), ... 
     'metrics', num2cell(metrics) );

请注意,此方法的开销(就内存消耗而言)非常高。如果您的数组CENTERS,RADIUSES和METRICS非常大,最好使用“平面”内存布局,即将数组存储在一个结构中:

S = struct;
S.centers = centers;
S.radiuses = radiuses;
S.metrics == metrics;