2

我有一个结构矩阵:

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

谢了,兄弟们。

4

1 回答 1

4

将相同的函数应用于数组的每个元素是构建arrayfun的目的(有关有用的讨论/示例,请参阅Loren Shure 的这篇博客文章)。

Iff是您的函数,并且s是具有字段a和的结构数组b

result = arrayfun(@(x)f(x.a,x.b), s);

会成功的。如果您以前没有遇到过这些,@(x)它是一个匿名函数。

如果函数不返回标量,请使用'uniformoutput'选项(设置为false),使其result成为元胞数组。

result = arrayfun(@(x)f(x.a,x.b), s, 'uniformoutput', false); 

注1:arrayfun很慢!通常(总是?)比循环慢。它的优势(根据我的经验/意见)来自于如果/当您的代码更改时不必处理矩阵尺寸的大小/形状,以及更容易阅读的更短的代码。

注意 2:您可以使用'uni'and0代替'uniformoutput'andfalse来节省打字/行空间,但以清晰度为代价

于 2013-01-19T23:09:58.120 回答