1

I have three vectors centers, radiuses, metrics all Nx1 (centers is Nx2, but it is not a problem at all). And I want to convert them into vector Nx1 of structures where each structure has fields: center, radius, metric and corresponding values of this fields, like structArray(i).metric == metrics(i). What is the best and simpliest way to do this?

4

2 回答 2

2

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

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

请注意使用维度输入num2cellcenters变量转换为 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
于 2016-03-04T18:45:27.957 回答
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;
于 2016-03-04T18:46:31.820 回答