【问题标题】:Struct array initialization without values没有值的结构数组初始化
【发布时间】:2014-02-10 17:06:34
【问题描述】:

我有一个结构

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.

【问题讨论】:

  • 如果不支持,请不要这样做。不要使用AStructY(1)=El 插入第一个元素,而是使用AStructY=El
  • cell2struct 方法是否与编码器生成兼容?我无法测试。

标签: arrays matlab array-initialization


【解决方案1】:

使用cell2struct:

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

这给出了具有相同字段的7x1 struct array,但内容为空。如果你想要一个1x7,只需转置数组(即AStructY = cell2struct(...)<b>.'</b>)。

【讨论】:

  • 对,有一个内置的方法。
【解决方案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

【讨论】:

  • AStructX 是一个结构体的一维数组,结构体有fields1-field5
  • 这是具有自定义字段名称的二维的特殊情况,它只是不允许超过 2 个维度。这将适用于您的示例。
  • 虽然它给了我一个数组元素的结构,但更接近我想要得到的
  • 真的吗?它应该是一个结构数组......你可以尝试使用二维数组来看看这是否是问题所在?我有解决这个问题的方法,但这不应该是原因......当我测试它时它确实有效,你使用什么 Matlab 构建?
  • R2013a,我会重试
猜你喜欢
  • 1970-01-01
  • 2012-04-09
  • 2015-07-29
  • 1970-01-01
  • 2022-01-13
  • 1970-01-01
  • 2020-03-05
  • 2021-08-03
  • 1970-01-01
相关资源
最近更新 更多