我有一个结构矩阵:
s(1:2,1:3) = struct('a',1,'b',2);
我有一个有2个int输入的函数,并根据计算int值 一些逻辑。如何使用每个结构的字段('a'和'b')作为函数的输入,在所有矩阵上应用该函数。结果矩阵应与s的大小相同,只是函数的结果为数据。
function f = SomeFunctionIWrote(a,b)
%...Some calculations...
f = result;
end
谢谢, 盖
答案 0 :(得分:3)
将相同的函数应用于数组的每个元素是为arrayfun构建的(Loren Shure的this blog post有用的讨论/示例)。
如果f
是您的功能,s
是包含字段a
和b
的结构数组,
result = arrayfun(@(x)f(x.a,x.b), s);
会做到这一点。 @(x)
如果您之前没有遇到过anonymous function,则为{{3}}。
如果函数没有返回标量,请使用'uniformoutput'
选项(设置为false
),以便result
成为单元格数组。
result = arrayfun(@(x)f(x.a,x.b), s, 'uniformoutput', false);
注1:arrayfun
很慢!通常(总是?)慢于循环。它的优势(根据我的经验/意见)来自于在代码更改时不必处理矩阵尺寸的大小/形状,以及更容易阅读的更短代码。
注意2:您可以使用'uni'
和0
代替'uniformoutput'
和false
来节省输入/行间距,但会牺牲清晰度