2016-04-22 147 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循環可以再使你的計算相當快!