对于不耐烦的读者,structfun
解决方案在我的答案的底部:-) 但我首先要问自己......
使用循环有什么问题?以下示例显示了它是如何完成的:
%# An example structure
S.a = 2;
S.b = 3;
%# An example function
MyFunc = @(x) (x^2);
%# Retrieve the structure field names
Names = fieldnames(S);
%# Loop over the field-names and apply the function to each field
for n = 1:length(Names)
S.(Names{n}) = MyFunc(S.(Names{n}));
end
Matlab 函数,例如arrayfun
并且cellfun
通常比显式循环慢。我猜structfun
可能会遇到同样的问题,那为什么还要麻烦呢?
但是,如果您坚持使用structfun
它,可以这样做(为了强调通用性,我将示例稍微复杂一点):
%# structfun solution
S.a = [2 4];
S.b = 3;
MyFunc = @(x) (x.^2);
S = structfun(MyFunc, S, 'UniformOutput', 0);