Matlab:在struct矩阵上应用函数

时间:2013-01-19 21:12:06

标签: function matlab matrix struct apply

我有一个结构矩阵:

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

谢谢, 盖

1 个答案:

答案 0 :(得分:3)

将相同的函数应用于数组的每个元素是为arrayfun构建的(Loren Shure的this blog post有用的讨论/示例)。

如果f是您的功能,s是包含字段ab的结构数组,

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来节省输入/行间距,但会牺牲清晰度