1

3 つのベクトルcenters, radiuses, metricsすべて Nx1 ( centersNx2 ですが、まったく問題ありません) があります。そして、それらを構造体のベクトル Nx1 に変換したいと思います。各構造体にはフィールドがcenter, radius, metricあり、このフィールドの対応する値はstructArray(i).metric == metrics(i). これを行うための最良かつ最も簡単な方法は何ですか?

4

2 に答える 2

2

structデータをセル配列に変換することにより、コンストラクターを直接使用できます。

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

への次元入力を使用して、変数を 1x2 セルの Nx1 配列にnum2cell変換していることに注意してください。centers

いくつかのサンプルデータでこれを試すと:

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 が非常に大きい場合は、「フラットな」メモリ レイアウトを使用することをお勧めします。つまり、配列を 1 つの構造体に格納します。

S = struct;
S.centers = centers;
S.radiuses = radiuses;
S.metrics == metrics;
于 2016-03-04T18:46:31.820 に答える