Matlab:如何对两个等效结构的字段求和?

标签 matlab data-structures

我在 Matlab 工作。我已经定义:

a(1).x=1;
a(1).y=2;
a(1).z.w=3;

a(2).x=4;
a(2).y=5;
a(2).z.w=6;

我现在尝试在 a(1) 和 a(2) 两个结构中添加字段,这样我得到:

c.x = 5; 
c.y = 7; 
c.z.w = 9; 

知道如何以优雅的方式做到这一点吗?请注意,在原始问题中,结构有更多的字段(大约 50 个)。

非常感谢您! 何塞

最佳答案

这是一个解决方案,适用于任何深度的结构

脚本代码(或 MATLAB 命令)

a(1).x=1;
a(1).y=2;
a(1).z.w=3;

a(2).x=4;
a(2).y=5;
a(2).z.w=6;
c=a(1);
c = returnStruct(c, a(2));
%{
you can also sum any amount of structs
for i=2:length(a)
   c=returnStruct(c, a(i));
end
%}

用递归函数

function rs = returnStruct(s,a)
fn = fieldnames(s);
for i=1:length(fn)
  if isstruct(s.(fn{i}))
    s.(fn{i}) = returnStruct(s.(fn{i}), a.(fn{i}));
  else
    s.(fn{i}) = s.(fn{i})+a.(fn{i});
  end
end
rs = s;
end

我针对更深层次的结构对其进行了测试,它运行良好。也许,您必须根据自己的情况稍微调整一下,但这应该是正确的方法。

不幸的是,struct2cell 之类的函数只能转换第一层,因此您需要其他东西。

关于Matlab:如何对两个等效结构的字段求和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30591458/

相关文章:

c++ - C++ unordered_map 的 rehash() 和 reserve() 方法有什么区别?

events - 有什么方法可以在将鼠标悬停在Matlab中的某个点上时触发回调函数吗?

matlab - 强制 MATLAB 重新加载在 mex 函数中链接的库

c++ - c++ if语句中的多个条件(通过链表的堆栈实现)

c++ - 我们可以将数据永久保存为数据结构吗?

java - 没有额外空间的 O(n) 中的反转堆栈不会发生

java - 我如何找到并打印数组中恰好出现 K 次的最小数字,其中 K 是用户输入?

c++ - 稀疏矩阵乘法的最佳包

matlab - 检查数据是否存在于另一个矩阵中,如果存在,则替换它

matlab - 从每行中添加不同数量的元素