1

私は構造を持っています

AStructX : 7x1 struct array with fields:
    field1
    field2
    field3
    field4
    field5

ここで、前の構造体のように見える空の 1x7 を生成したいと思いますが、値は空です。

試してみ AStructY = repmat(AStructX(1),1,7);ましたが、の値AStructXがコピーされます。

値を追加すると試してみ AStructY = repmat(AStructX(1),1,0);たところ、MATLAB ではパスしますが、Coder 生成は次のエラー メッセージで失敗します ??? Subscripting into an empty matrix is not supported.

4

2 に答える 2

2

以下の仮定を立てます
。 1. AStructX は 2-D です。
2. 新しい構造のサイズはsize(AStructX').
3. フィールド名は固定ではありません。

これを行うには、最初にフィールド名が必要です。次に、空のセルを値として持つ新しい構造体を作成します。

names = fieldnames(AStructX)'; %'// row vector
len = length(names); %// number of fields
for i=1:len
  names{2,i} = cell(size(AStructX')); %'// the contents are empty
end
AStructY = struct( names{:} ); %// will take the names matrix columnwise

これにより、完全に空のエントリ ( []) が生成されます。代わりに値を初期化する場合は0、ループ内の行が次のようになります。

  names{2,i} = num2cell(zeros(size(AStructX'))); %'// initialize values to 0
于 2014-02-10T17:45:38.100 に答える
2

使用cell2struct:

len = 7;
fn = fieldnames(AStructX)
AStructY = cell2struct(repmat({[]},numel(fn),len),fn)

これにより7x1 struct array、同じフィールドで空のコンテンツが得られます。が必要な場合は1x7、単に配列を転置します (つまり)。AStructY = cell2struct(...).'

于 2014-02-10T18:57:56.460 に答える