我有一个结构
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
Run Code Online (Sandbox Code Playgroud)
现在我想对存储在每个字段中的数据应用函数/操作并修改字段的内容,即我想申请
s.a = myFun( s.a );
s.b = myFun( s.b );
s.c = myFun( s.c ); % etc. ...
Run Code Online (Sandbox Code Playgroud)
如果没有明确地写上面的所有字段,我怎么能这样做呢?我在考虑structfun- 但我不太确定如何完成这个"到位"修改......
谢谢!
对于不耐烦的读者,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
Run Code Online (Sandbox Code Playgroud)
Matlab函数例如arrayfun并且cellfun通常比显式循环慢.我猜structfun可能会遇到同样的问题,所以为什么要这么麻烦?
但是,如果你坚持使用structfun它可以按如下方式完成(为了强调一般性,我使这个例子稍微复杂一点):
%# structfun solution
S.a = [2 4];
S.b = 3;
MyFunc = @(x) (x.^2);
S = structfun(MyFunc, S, 'UniformOutput', 0);
Run Code Online (Sandbox Code Playgroud)