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