在 Matlab 中向结构体添加新字段

问题描述 投票:0回答:2

我有一个 800x1 结构体

S
,其中包含字段
A
B
C
D
E
F
G
。我想添加第八个字段
H
,其中
H
是一个 800x8191 双精度矩阵。 S 的每个元素都有 1x8191 行
H

也就是说,我想为每个

S(i)=H(i,:)
分配
i

我尝试了

S.H=H
S.Hcalculated=H
,但收到错误“此作业需要标量结构。”

我怎样才能成功?

matlab matrix struct field
2个回答
0
投票

你可以尝试一下

S=arrayfun(@(s,h)setfield(s,'H',cell2mat(h)),S,num2cell(H,2));

例如,

>> S=struct;
>> S.A='a';
>> S(2).A='b';
>> H=[1,2;3,4];
>> H=num2cell(H,2);
>> S=arrayfun(@(s,h)setfield(s,'H',cell2mat(h)),S,H'); % transpose is needed because the shape of S is 1x2

注意:如果您需要对 H 执行按行操作,出于效率原因,您应该考虑先执行此操作,然后再将其行附加到 S 上。


0
投票

有两个步骤:

  1. 将矩阵
    H
    分成每行一个单独的矩阵。
  2. 使用
    H
     将新矩阵 S.H
     分配给 
    deal

示例:

这是示例数据,

S
是您的结构(但为了简单起见,大小为 3x1,只有一个字段
A
),
H
是一个 3x10 数组,其中第一个维度与
S
的长度匹配:

S = struct('A', {'a', 'b', 'c'})';
H = randn(3, 10);

上述两个步骤:

H = num2cell(H, 2);
[S.H] = deal(H{:});
© www.soinside.com 2019 - 2024. All rights reserved.