我有一个 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
,但收到错误“此作业需要标量结构。”
我怎样才能成功?
你可以尝试一下
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 上。
有两个步骤:
H
分成每行一个单独的矩阵。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{:});