没有值的struct数组初始化

时间:2014-02-10 17:06:35

标签: arrays matlab array-initialization

我有一个结构

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.

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

使用cell2struct

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

这为7x1 struct array提供了相同的字段,空内容。如果您需要1x7,只需转置数组(即AStructY = cell2struct(...).')。