在 MATLAB 中使用匿名函数跳过输出

发布于 2024-09-07 03:09:41 字数 286 浏览 4 评论 0 原文

假设我想从返回两个输出的 m 文件函数创建一个匿名函数。是否可以设置匿名函数,使其仅返回 m 文件函数的第二个输出?

示例:ttest2 返回两个输出:t/f 和概率。如果我想使用 cellfun 进行 t 检验,我可能只对收集概率感兴趣,即我想写这样的东西

probabilities = cellfun(@(u,v)ttest2(u,v)%take only second output%,cellArray1,cellArray2)

Say I want to create an anonymous function from a m-file-function that returns two outputs. Is it possible to set up the anonymous function such that it only returns the second output from the m-file-function?

Example: ttest2 returns two outputs, t/f and a probability. If I want to use the t-test with cellfun, I might only be interested in collecting the probabilities, i.e. I'd like to write something like this

probabilities = cellfun(@(u,v)ttest2(u,v)%take only second output%,cellArray1,cellArray2)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

从﹋此江山别 2024-09-14 03:09:41

我不可能知道 匿名函数 让它选择从具有多个可能输出参数的函数返回哪个输出。但是,当您评估匿名函数时,您可以返回多个输出。以下是使用函数 MAX 的示例:

>> data = [1 3 2 5 4];  %# Sample data
>> fcn = @(x) max(x);   %# An anonymous function with multiple possible outputs
>> [maxValue,maxIndex] = fcn(data)  %# Get two outputs when evaluating fcn

maxValue =

     5         %# The maximum value (output 1 from max)


maxIndex =

     4         %# The index of the maximum value (output 2 from max)

此外,处理上面给出的具体示例的最佳方法是实际上仅使用 函数句柄 @ttest2 作为CELLFUN,然后从 CELLFUN 本身:

[junk,probabilities] = cellfun(@ttest2,cellArray1,cellArray2);

在较新版本的 MATLAB 上,您可以将变量 junk 替换为 ~ 忽略第一个输出参数。

There's no way I know of within the expression of the anonymous function to have it select which output to return from a function with multiple possible output arguments. However, you can return multiple outputs when you evaluate the anonymous function. Here's an example using the function MAX:

>> data = [1 3 2 5 4];  %# Sample data
>> fcn = @(x) max(x);   %# An anonymous function with multiple possible outputs
>> [maxValue,maxIndex] = fcn(data)  %# Get two outputs when evaluating fcn

maxValue =

     5         %# The maximum value (output 1 from max)


maxIndex =

     4         %# The index of the maximum value (output 2 from max)

Also, the best way to handle the specific example you give above is to actually just use the function handle @ttest2 as the input to CELLFUN, then get the multiple outputs from CELLFUN itself:

[junk,probabilities] = cellfun(@ttest2,cellArray1,cellArray2);

On newer versions of MATLAB, you can replace the variable junk with ~ to ignore the first output argument.

痕至 2024-09-14 03:09:41

一种方法是定义函数:

function varargout = getOutput(func,outputNo,varargin)
    varargout = cell(max(outputNo),1);
    [varargout{:}] = func(varargin{:});
    varargout = varargout(outputNo);
end

然后 getOutput(@ttest2,2,u,v) 仅给出 p 值

要在 cellfun 中使用它,您需要运行:

probabilities = cellfun(@(u,v)getOutput(@ttest2,2,u,v)...

这消除了每次都编写包装器的需要,但您必须确保该函数始终位于路径中。

One way to do this is to define the function:

function varargout = getOutput(func,outputNo,varargin)
    varargout = cell(max(outputNo),1);
    [varargout{:}] = func(varargin{:});
    varargout = varargout(outputNo);
end

and then getOutput(@ttest2,2,u,v) gives only the p-value.

To use it in a cellfun you would need to run:

probabilities = cellfun(@(u,v)getOutput(@ttest2,2,u,v)...

This eliminates the need to write a wrapper every time, but then you have to make sure this function is always in the path.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文