对单元结构中的 MATLAB 数组求和

sum matlab arrays within cell structure

提问人:Miss_Orchid 提问时间:7/2/2018 更新时间:7/2/2018 访问量:64

问:

我有一个 221 x 24 的元胞阵列 S。每个数组中都有另一个由几个不同字段组成的数组(假设 A、B、C 和 D),其中每个字段(A、B、C、D)都是一个 50 x 50 的数组。我只想对数组 S 的每一列中的 A、B、C 和 D 求和。例如:

S{1,1}。A + S{2,1}。A + ... + S{23,1}。一个。。。

S{1,2}.B + S{2,2}。B + ... + S{153,2}。B ...

S{111,3}。C + S{117,3}。C + ... + S{230,3}。C ...

最简单的方法是什么?我知道如果结构中没有字段,则有一个函数可以求和(例如,sum([S{:}]) ),但我只想对每个字段中的特定字段求和。有什么想法吗?

数组 MATLAB 结构 单元

评论

1赞 Sardar Usama 7/2/2018
你能提供你所拥有的样本吗?每个单元格只有一个字段吗?
1赞 PyMatFlow 7/2/2018
请举一个来自所有领域的例子。
0赞 Miss_Orchid 7/2/2018
S{3,1} 可以包含:S{3,1}。A, S{3,1}.B, S{3,1}.C, ..., S{3,1}.L 其中 A、B、C、D ...L 都是 50 x 50 数组。我想求和 S{3,1}。A 与 S{4,1}。A, S{5,1}.A, ..., S{n,1}.A 和求和 S{3,1}。B 与 S{4,1}。B, S{5,1}.B, ..., S{n,1}.B A、B、C、D、...、L 的数组是一个简单的 50x50 数字数组。我可以做:对于 m = 50 对于 n = 50 S{3,1}。A(m,n) + S{4,1}。A(m,n) + ...但这很长,并希望尝试在更好的代码中自动化它。

答:

0赞 Zizy Archer 7/2/2018 #1

可能还有更多的“MATLABy”方法来避免循环并使之更简单,但这个循环应该相当简单:

FN = fieldnames(S{1});
for i = 1 : size(S, 1)
   sumStruct{i} = 0;
   for j = 1 : size(S, 2)
      sumStruct{i} = sumStruct{i} + S{i,j}.(FN{j});
   end
end

这假设您想要所有 的总和,依此类推,如问题中所示。如果你也想要,你需要第 3 个循环和 2 个索引 - 它应该相对简单地实现。S{1...N, 1}.AS{1...N, 2}.BS{1...N, 1}.BsumStruct