6

我有一个结构

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- 但我不太确定如何完成这种“就地”修改......

谢谢!

4

1 回答 1

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通常比显式循环慢。我猜structfun可能会遇到同样的问题,那为什么还要麻烦呢?

但是,如果您坚持使用structfun它,可以这样做(为了强调通用性,我将示例稍微复杂一点):

%# structfun solution
S.a = [2 4];
S.b = 3;
MyFunc = @(x) (x.^2);
S = structfun(MyFunc, S, 'UniformOutput', 0);
于 2012-12-05T08:48:04.430 回答