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 传递,但编码器生成失败并显示以下错误消息 ??? Subscripting into an empty matrix is not supported.

4

2 回答 2

2

我将做出以下假设:
1. AStructX 是二维的。
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 回答