我需要的功能(即mean
)適用於結構數組的各個領域。即,如果我有以下結構數組:應用的功能,結構數組的各個領域在Matlab
A(1).x = 1;
A(1).y = 2;
A(2).x = 3;
A(2).y = 4;
我想找到x值的均值和y值的均值。該解決方案應該適用於結構中的任意數量的字段。
我最初的想法是使用structfun
,但現在我只能和轉換結構的數組到數組結構的問題。我想我可以使用循環遍歷fieldnames
返回的字段名稱,但也許有一個更直接的方法。
我需要的功能(即mean
)適用於結構數組的各個領域。即,如果我有以下結構數組:應用的功能,結構數組的各個領域在Matlab
A(1).x = 1;
A(1).y = 2;
A(2).x = 3;
A(2).y = 4;
我想找到x值的均值和y值的均值。該解決方案應該適用於結構中的任意數量的字段。
我最初的想法是使用structfun
,但現在我只能和轉換結構的數組到數組結構的問題。我想我可以使用循環遍歷fieldnames
返回的字段名稱,但也許有一個更直接的方法。
最簡單的解決方案,我知道
F=fieldnames(A)
G=struct()
for ix=1:numel(F)
G.(F{ix})=mean([A.(F{ix})]);
end
我碰到另一個想法來解決這個問題:
cell2struct(cellfun(@(x)(mean([A.(x)])),fieldnames(A),'uni',false),fieldnames(A),1)
如果一個矢量,而不是一個結構是預期的輸出,去掉外cell2struct
如果內容是標量:從結構體轉化爲細胞,然後從細胞到基質:
mean(cell2mat(squeeze(struct2cell(A))), 2)
方法#1
如果您正在尋找創建數組結構,然後用structfun
執行mean
,你可以試試這個無環路的方法 -
%// Get fieldnames
fns = fieldnames(A)
%// Get numeric values from the fields and store as numeric array
arrayvals = reshape(struct2array(A),numel(fns),[])
%// Convert to cell array so that struct of arrays could be obtained
data = mat2cell(arrayvals,ones(1,numel(fns)),size(arrayvals,2))
%// Convert to struct of arrays as you were looking to work with
A1 = cell2struct(data, fns, 1)
%// Finally the mean values with structfun
meanvals = structfun(@mean, A1)
輸出(顯示A和A1) -
A =
1x2 struct array with fields:
x
y
A1 =
x: [1 3]
y: [2 4]
方法2
如果你想跳進mean
結果,而與structfun
被打擾,您可以將您的結構直接轉換爲數字陣列,並得到平均值這種方式 -
meanvals = mean(reshape(struct2array(A),numel(fieldnames(A)),[]),2)
如果你想創建陣列的結構,然後使用''用於計算mean' structfun',試試這個[解決方案](http://stackoverflow.com/a/25631349/3293881) – Divakar 2014-09-02 19:58:24