我有一个结构
s.a = [1 2 3];
s.b = [2 3 4 5];
s.c = [9, 6 ,3];
s.d = ... % etc. - you got the gist of it
现在我想对存储在每个字段中的数据应用函数/操作,并修改字段的内容,即我想要应用
s.a = myFun( s.a );
s.b = myFun( s.b );
s.c = myFun( s.c ); % etc. ...
如果没有明确地写上面的所有字段,我怎么能这样做?
我在考虑structfun
- 但我不太确定如何完成这个“到位”修改......
谢谢!
答案 0 :(得分:7)
对于不耐烦的读者,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
,通常为are slower than an explicit loop。我猜structfun
可能会遇到同样的问题,所以为什么要这么麻烦?
但是,如果你坚持使用structfun
,可以按照以下方式完成(为了强调一般性,我的例子稍微复杂一点):
%# structfun solution
S.a = [2 4];
S.b = 3;
MyFunc = @(x) (x.^2);
S = structfun(MyFunc, S, 'UniformOutput', 0);