2

所以......我可以理解matlab函数句柄及其用途。但有时,当它变得太神秘时,我需要帮助来进一步阐述它。以默认 MATLAB文档中的这个示例为例,例如:

f = @(x)x.^3-2*x-5;

我也可以将其重写为:

function f(arg)
  arg.^3 - 2*arg - 5;
end   

如前所述,任何人都可以帮助破译下面的代码?我在默认的 matlab 函数中不需要帮助。只是对理解这里的用户定义的匿名函数有一点帮助..

applyToGivenRow = @(func, matrix) @(row) func(matrix(row, :))
applyToRows = @(func, matrix) arrayfun(applyToGivenRow(func, matrix), 1:size(matrix,1))'
% Example
myMx = [1 2 3; 4 5 6; 7 8 9];
myFunc = @sum;
applyToRows(myFunc, myMx)
4

1 回答 1

3
applyToGivenRow = @(func, matrix) @(row) func(matrix(row, :))

这是一个创建另一个函数的函数,例如以下(取自问题的示例)

applyToGivenRow(@myFunc,myMx)

将评估函数

@(row) myFunc(myMx(row,:))

然后

applyToRows = @(func, matrix) arrayfun(applyToGivenRow(func, matrix), 1:size(matrix,1))'

使用此applyToGivenRow功能。Arrayfun 循环遍历您提供给它的向量 ( ) 并针对向量中的每个值1:size(matrix,1)评估您提供给它的函数 ( )。applyToGivenRow(func, matrix)

原作者也可以将其缩短为

applyToRows = @(func, matrix) arrayfun(@(row) func(matrix(row, :), 1:size(matrix,1))'

阅读有关匿名函数arrayfun的文档,应该很容易理解这一点。

于 2012-12-21T11:51:09.897 回答