我有一个结构矩阵:
s(1:2,1:3) = struct('a',1,'b',2);
我有一个有 2 个 int 输入的函数,并根据 符合某种逻辑。如何使用每个结构体的字段(“a”和“b”)作为函数的输入,在所有矩阵上应用该函数。结果矩阵应与 s 大小相同,只是将函数结果作为数据。
function f = SomeFunctionIWrote(a,b)
%...Some calculations...
f = result;
end
谢谢, 盖伊。
最佳答案
对数组的每个元素应用相同的函数就是arrayfun是为(请参阅 Loren Shure 的 this blog post 以获取有用的讨论/示例)。
如果 f
是您的函数,并且 s
是具有字段 a
和 b
的结构体数组,
result = arrayfun(@(x)f(x.a,x.b), s);
就可以了。 @(x)
是 anonymous function如果您以前没有遇到过这些。
如果函数不返回标量,请使用 'uniformoutput'
选项(设置为 false
),以便 result
变为元胞数组。
result = arrayfun(@(x)f(x.a,x.b), s, 'uniformoutput', false);
注1:arrayfun
很慢!通常(总是?)比循环慢。它的优点(根据我的经验/观点)来自于如果/当您的代码发生变化时不必处理矩阵维度的大小/形状,并且更短的代码更易于阅读。
注2:您可以使用'uni'
和0
代替'uniformoutput'
和false
节省打字/行空间,但以牺牲清晰度为代价
关于function - Matlab:在结构矩阵上应用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14418919/