我想知道是否有一种方便的方法来更新结构与Matlab中的另一个结构的值.下面是代码,与使用fieldnames,numel以及for循环,
fn = fieldnames(new_values);
for fi=1:numel(fn)
old_struct.(fn{fi}) = new_values.(fn{fi});
end
Run Code Online (Sandbox Code Playgroud)
当然,我不希望失去在田野old_struct中没有的new_values,所以我不能用简单old_struct=new_values.
更新结构是我们可能想要在解释器中的单个短行中执行的操作.
如何向结构数组添加新元素?我无法与空结构连接:
>> a=struct;
>> a.f1='hi'
a =
f1: 'hi'
>> a.f2='bye'
a =
f1: 'hi'
f2: 'bye'
>> a=cat(1,a,struct)
Error using cat
Number of fields in structure arrays being concatenated do not match. Concatenation of structure arrays requires that these arrays have the same set of
fields.
Run Code Online (Sandbox Code Playgroud)
那么是否可以添加具有空字段的新元素?
更新
我发现如果我同时添加新字段,则可以添加新元素:
>> a=struct()
a =
struct with no fields.
>> a.f1='hi';
>> a.f2='bye';
>> a(end+1).iamexist=true
a =
1x2 struct array with fields:
f1
f2
iamexist
Run Code Online (Sandbox Code Playgroud)
令人难以置信的是,没有直接的方法!可能有一些冒号等效的结构吗?
有没有简单的方法可以组合以下两个结构,而无需使用for循环或CELLFUN?
struct1 =
a: {43x1 cell}
struct2 =
b: [43x1 double]
c: {43x1 cell}
Run Code Online (Sandbox Code Playgroud)
我想要这样的组合结构:
struct3 =
a: {43x1 cell}
b: [43x1 double]
c: {43x1 cell}
Run Code Online (Sandbox Code Playgroud) 我希望在我进行部分计算的情况下合并结构字段,以便稍后填充整个结构字段单元格.
根据索引将结果放入细胞中,如下所示:
for i=3:4;
results1.index{i}=i;
results1.sqr{i}=i*i;
end
for i=1;
results2.index{i}=i;
results2.sqr{i}=i*i;
end
Run Code Online (Sandbox Code Playgroud)
分别给予:
results1 =
index: {[] [] [3] [4]}
sqr: {[] [] [9] [16]}
results2 =
index: {[1]}
sqr: {[1]}
Run Code Online (Sandbox Code Playgroud)
有没有办法合并得到的结果结构
allresults.index={[1] [] [3] [4]}
allresults.sqr={[1] [] [9] [16]}
Run Code Online (Sandbox Code Playgroud)
我可以避免重叠结果,因此在没有冲突的情况下(例如,没有单元格为空)没有冲突解决或覆盖就可以了.请注意,在较大的数据集中,单元格不限于标量,但可能包含单元格或其他类型.