2016-04-22 102 views
2

我有一个结构P有20个矩阵。每个矩阵是53x63x46双。矩阵的名称是相当随机的,例如S154,S324,S412等。有什么办法可以在这些矩阵中进行平均处理,而不必像这样输出?结构内矩阵的平均值

M=(P.S154 + P.S324 + P.S412 + ...)/20 

此外,这样的计算使用结构是否有意义。根据this post,可能应该将其转换为单元阵列。

+0

此链接可能会有所帮助:http://stackoverflow.com/questions/2803962/iterating-through-struct-fieldnames -in-matlab – BillBokeey

+0

excaza,我想得到所有矩阵的平均值。我的M例子是结构P中20个矩阵的平均值。 –

回答

1
struct2cell(P) 

是一个单元格数组,其中每个元素都是您的结构字段之一(字段名称被丢弃)。然后

cell2mat(struct2cell(P)) 

是沿着第一轴连接这些矩阵的结果。你可能会问,为什么会这样做,而不是说,创造一个新的轴,并给你一个四维数组,但期待这些问题的合理答案是要求沮丧。无论如何,除非我越来越糊涂的尺寸,然后

reshape(cell2mat(struct2cell(P)),[53 20 63 46]))) 

会给你大致4维数组你后,用“新”轴线(中当然!)2号。所以现在

mean(reshape(cell2mat(struct2cell(P)),[53 20 63 46]),2) 

将计算沿该轴的平均值。其结果将具有形状[53 1 63 46],所以现在你需要重新修复了坐标轴:

reshape(mean(reshape(cell2mat(struct2cell(P)),[53 20 63 46]),2),[53 63 46]) 
0

如果您正在使用结构,并通过您的问题,您有每个矩阵的字段名称。

因此,您需要:

1 - 使用功能fieldnames提取您的结构内部的所有矩阵名称。 - http://www.mathworks.com/help/matlab/ref/fieldnames.html

2 - 那么你可以做这样访问:

names = fieldnames(P); 
matrix1 = P.names{1} 

使用for循环可以再使你的计算相当快!