将匿名函数定义为 m 文件函数 4 个输出中的 2 个

2023-12-01

我有一个带有 4 个输出的 m 文件函数。我想定义一个具有相同输入的匿名函数,但只产生四个输出中的两个。这可能吗?


AFAIK,您不能仅使用内联匿名函数来执行此操作,因为 Matlab 语法不提供在单个表达式中捕获函数的多个输出并对其进行索引的方法。但是您可以编写几个可重用的辅助函数来执行此操作,然后使用它们定义匿名函数。

假设您的四个参数输出函数名为“f4”。

function varargout = f4(x)
%F4 Dummy function that returns 4 argouts holding identifying indexes
varargout = num2cell(1:4);

这是一个可重用的辅助函数,用于重新映射函数调用的输出。

function varargout = callandmap(fcn, ix, varargin)
%CALLANDMAP Call a function and rearrange its output arguments

tmp = cell(1,max(ix));        % Capture up to the last argout used
[tmp{:}] = fcn(varargin{:});  % Call the original function
varargout = tmp(ix);          % Remap the outputs

现在您可以创建像这样的匿名参数重映射函数。在这里,g 持有一个匿名函数,它采用与原始函数相同的输入,但只返回其原始 4 个输出中的 2 个。

>> g = @(varargin) callandmap(@f4, [2 4], varargin{:})
g = 
    @(varargin)callandmap(@f4,[2,4],varargin{:})
>> [a,b] = g('dummy') % gets argouts 2 and 4 from original f4() function
a =
     2
b =
     4
>> 

使用 varargin 允许您在调用结果函数句柄时省略尾随参数。如果您知道将始终提供所有argins,则可以根据需要使用命名argins以提高可读性。

你可以变得更奇特,用一个闭包来做到这一点。

function fcn = mapargout(fcnIn, ixArgout)
%MAPARGOUT Create wrapper function that selects or reorders argouts
%
% fcn = argoutselector(fcnIn, ixArgout)
%
% Wraps a given function handle in a function that rearranges its argouts.
% This uses closures so it may have performance impacts.
%
% FcnIn is a function handle to wrap.
%
% IxArgout is a list of indexes in to the original functions argout list
% that should be used as the outputs of the new function.
% 
% Returns a function handle to a new function.

fcn = @extractor;

    function varargout = extractor(varargin)
    n = max(ixArgout);
    tmp = cell(1,n);
    % Call the wrapped function, capturing all the original argouts
    [tmp{:}] = fcnIn(varargin{:});
    % And then select the ones you want
    varargout = tmp(ixArgout);
    end

end

这使得创建匿名函数的代码更加简单。您可以将其与其他函数包装器调用组合起来。

>> g = mapargout(@f4, [2 4])
g = 
    @mapargout/extractor
>> [a,b] = g('dummy')
a =
     2
b =
     4
>> 

但在 Matlab 中使用闭包可能会很棘手,并且可能会对性能产生影响。除非您需要额外的功能,否则 callandmap 方法可能更可取。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将匿名函数定义为 m 文件函数 4 个输出中的 2 个 的相关文章

  • 在 Matlab 中高效获取像素坐标

    我想在 Matlab 中创建一个函数 给定一个图像 该函数将允许人们通过单击图像中的像素来选择该像素并返回该像素的坐标 理想情况下 人们能够连续单击图像中的多个像素 并且该函数会将所有相应的坐标存储在一个矩阵中 有没有办法在Matlab中做
  • matlab中的正则逻辑回归代码

    我正在尝试正则化 LR 在 matlab 中使用以下公式很简单 成本函数 J theta 1 m sum y i log h x i 1 y i log 1 h x i lambda 2 m sum theta j 梯度 J theta t
  • 如何使用 MATLAB 的 substruct 函数创建表示使用“end”的引用的结构?

    我想使用substruct http www mathworks com help matlab ref substruct html函数创建一个结构体以供使用subsref 目的是使用索引字符串subsref而不是通常的 符号 因为我正在
  • 理解高斯混合模型的概念

    我试图通过阅读在线资源来理解 GMM 我已经使用 K 均值实现了聚类 并且正在了解 GMM 与 K 均值的比较 以下是我的理解 如有错误请指出 GMM 类似于 KNN 在这两种情况下都实现了聚类 但在 GMM 中 每个簇都有自己独立的均值和
  • 如何在放置颜色条后保持子图大小不变

    假设我们有一个 1 2 子图 我们在其中绘制了一些图形 如下所示 subplot 1 2 1 surf peaks 20 subplot 1 2 2 surf peaks 20 然后我们要添加一个颜色条 colorbar 我不希望结果中的正
  • 如何在 matlab 中创建由多个 3d 图像数据数组组成的数组

    我正在阅读 15 张图片imagedata imread imagename jpg 它的大小总是320 by 320 by 3 如何将数据放入数组中 使用 for for 循环 以便在访问新数组的第一个元素时获得输入的第一个图像的 RGB
  • “Desort”向量(撤消排序)

    在Matlab中 sort返回排序后的向量和索引向量 显示哪个向量元素已移动到以下位置 v ix sort u Here v是一个包含所有元素的向量u 但已排序 ix是一个向量 显示每个元素的原始位置v in u 使用 Matlab 的语法
  • 给定协方差矩阵,在Matlab中生成高斯随机变量

    Given a M x M期望的协方差 R 以及所需数量的样本向量 N计算一个N x M高斯随机向量 X在普通 MATLAB 中 即不能使用r mvnrnd MU SIGMA cases 不太确定如何解决这个问题 通常你需要一个协方差并且意
  • 检测数据集中线性行为的算法

    我已经发布了一个关于对数据集的一部分进行多项式拟合的算法 https stackoverflow com q 17595932 2320757前一段时间收到一些建议去做我想做的事 但我现在面临另一个问题 我尝试应用答案中建议的想法 我的目标
  • 如何将复杂的 csv 文件导入到 Matlab 中的数值向量

    我想知道我们应该如何读取由字符串 双精度数和字符等组成的复杂 csv 文件 例如 您能否提供一个可以在此 csv 文件中提取数值的成功命令 Click here http www ecb europa eu stats money yc d
  • 从动态 Java 类路径导入 Java 类时出现 Matlab 编译器 MCC 错误

    我怎样才能得到mcc识别来自用户提供的 Java 库的导入 还是简单地忽略无法解析的导入 我有一个使用 Matlab 编译器构建的 Matlab 代码库 但构建正在中断 因为mcc遇到的时候会报错importMatlab 动态类路径上的 J
  • 加到 100 的随机数:Matlab

    我将人口数量分成不同的矩阵 现在想使用随机数测试我的代码 快速提问 谢谢你们提前的帮助 如果我使用 100 rand 9 1 使这 9 个数字相加等于 100 的最佳方法是什么 我想要 9 个 0 到 100 之间的随机数 加起来为 100
  • Matlab:从一定范围内不重复的随机整数

    我想获得一个包含在范围内且不重复的随机整数的数组 我使用了 randperm 15 3 输出是 8 10 12 这个函数不使用范围 我只想从 10 中随机取值 例如 如果您有统计工具箱 则可以使用randsample https www m
  • 有没有一种简单的方法来提供基于 Matlab 的 Web 应用程序或 Web 服务?

    我和一位同事花了几年时间开发一个非常酷的 Matlab 应用程序 MDLcompress 在 Matlab 中 我可以输入 MDLcompress filename txt 它会告诉我有关 filename txt 内容的各种非常酷的内容
  • 此代码中 Matlab 与 C++ 速度比较

    我编写了简单的 C 代码并在 C 中对其进行了测试 然后我通过以下方式为 MATLAB 调整了相同的代码mex file name cpp并在 MATLAB 中运行相同的代码 该代码使用与 C 相同的编译器 这是代码 int k for i
  • MATLAB - 避免循环基于其他向量的元素创建矩阵

    假设我有向量x y z 长度n m l 我想创建一个细胞矩阵Q使用这些向量的元素 天真的人们可以像这样使用 for 循环 for i 1 n for j 1 m for k 1 l Q i j k someFunction x i y j
  • 根据不规则数据绘制曲面

    我正在从分散的数据集中绘制填充轮廓图或曲面图 与其他 Q 的主要区别在于数据不是凸的 r th meshgrid 10 15 0 180 x y deal r sind th r cosd th z x 2 y 2 scatter x y
  • 一次设置多个字段/向单元结构添加新字段

    我有一个 1xn 结构 该结构包含一些带有数字单元格的字段 并非每个结构都具有相同的字段 所以我想将缺少的字段添加到结构中 但我没明白 Mimimal example I have same cells imported from csv
  • 如何从图像中去除颗粒状细节[重复]

    这个问题在这里已经有答案了 我用过adapthisteq以提高前景物体的可见度 然而 这似乎产生了颗粒状的噪点细节 如何从图像中去除这些颗粒状细节 我尝试过高斯模糊imgaussfilt虽然它确实消除了一些颗粒状细节 但图像中细胞的形状变得
  • MATLAB 中的神经网络

    我在 MATLAB 中训练了异或神经网络并得到了这些权重 iw 2 162 2 1706 2 1565 2 1688 lw 3 9174 3 9183 b 1 2 001 2 0033 b 2 3 8093 出于好奇 我尝试编写 MATLA

随机推荐

  • 为什么 Class 变量没有更新其所有实例?

    我正在学习课程 但不明白这一点 class MyClass var 1 one MyClass two MyClass print one var two var out 1 1 one var 2 print one var two va
  • MultiView Android Delphi 与 TWebBrowser

    在包含 TWebBrowser 的区域中使用 MultiView 组件 该组件会覆盖 MultiView 有没有办法来解决这个问题 用法 德尔福XE8更新1 第一个测试中没有代码 所有配置均通过 MultiView 实现可视化 使用 TWe
  • UIView动画在动画过程中确定中心

    我正在使用 UIView 的 animateWithDuration delay options animations completion 方法在几秒钟左右的时间内沿着一条线移动我的视图 我想在该动画期间的任意时间确定 UIView 及其
  • 如何将数组从一个 Servlet 传递到另一个 Servlet?

    我想将多个值从一个 servlet 传递到另一个 servlet 请告诉我如何通过 You can 使用以下命令将数组作为属性放入请求上下文中request setAttribute 使用以下命令将请求转发到第二个 servletReque
  • 宏 ((void(*)())0)() 是什么意思?

    以下宏的结果很清楚 define CRASH do int uintptr t 0xbbadbeef 0 void 0 while false 我的问题是 这条线是什么 void 0 分解为 用英语 例如 这是一个返回指向 的指针的函数 看
  • 如何消除应用栏上的弹跳效果?

    应用栏过去在滑动时会出现问题 它滚动得不顺畅 请参考这些 http stackoverflow com questions 30923889 flinging with recyclerview appbarlayout https git
  • 查询在函数内部不起作用

    嗯 我在 SMF 的自定义脚本中有这个函数 query SELECT id member real name id group FROM smf members WHERE id group gt 0 AND id group 9 AND
  • 如何垂直居中 Bootstrap 轮播标题?

    我有一个引导轮播 我正在尝试为轮播创建一个标题 该标题始终垂直居中并稍微向左定位 我有用于水平定位的CSS 但是当我尝试垂直定位时 标题不会保持原样 如何保持 carousel caption 始终垂直居中并稍微偏左 HTML div cl
  • 可选关键字参数的命名元组和默认值

    我正在尝试将一个较长的空心 数据 类转换为命名元组 我的班级目前如下所示 class Node object def init self val left None right None self val val self left lef
  • ASP MVC4 中的模型传递背后发生了什么

    现在正在学习 ASP MVC 这只是我学习 MVC 的第三周 我对建模传递做了一些测试 基本上控制器只是获取模型 然后传递到视图而不执行任何操作 但似乎代码失败了 下面是我创建的 ViewModel using System using S
  • 如何在iPhone App中显示Facebook粉丝墙?

    我想如下图所示显示 Facebook 粉丝墙 您能让我知道如何做到吗 Thanks 您可以从以下位置拉取墙源列表https graph facebook com cocacola statuses access token 可以使用 gra
  • 我可以使用“pip”而不是“easy_install”来解决“python setup.py install”依赖关系吗?

    python setup py install将自动安装列出的软件包requires using easy install 我该如何使用它pip反而 是的你可以 您可以从网络或计算机上的 tarball 或文件夹安装软件包 例如 从网络上的
  • Typescript 联合类型在 Swift 中的等价物是什么?

    我想在 Swift 上创建类似的东西 用于 Alamofire json 解析 interface Question value string data string interface Advice type string data va
  • 将数据 URI 写入 Firefox 扩展中的文件

    我正在开发一个 Firefox 插件 我需要将一堆数据 URI 图像保存到磁盘 我该如何解决这个问题 我浏览过MDN 上的文件 I O 片段 但这些片段对我没有多大帮助 有异步和同步方法 我想使用异步方法 但如何使用异步方法编写二进制文件
  • 使用按钮api动态更改jquery Datatables导出excel的文件名

    来自 API myTable DataTable buttons buttons text Alert action function e dt node config config title dynamic title 这正在更改标题
  • 具有数据依赖性的 for 循环的向量化

    我有一个基于 BiCCG 共轭梯度 的矩阵求解器的实现 它也考虑了周期性 碰巧的是 实现是计算密集型的 并且由于依赖性问题 循环没有自动矢量化 我探索了一下 似乎红黑高斯赛德尔算法比普通版本 也有类似的依赖性问题 更有效地可并行化 是否可以
  • 使用shinyBS包中的bsModal和plotly R的plotly_click在弹出窗口中生成新图

    这是我使用的基本闪亮应用程序的代码plotly click事件可选择显示另一个情节 我希望该侧箱图在模式弹出窗口中呈现 而不是在页面内的侧面呈现 library shiny library plotly df1 lt data frame
  • 以编程方式更新嵌入的 Excel 文件

    我正在尝试以编程方式修改 Word 文档中嵌入的 Excel 表格 为此 我修改了 docx 文件和嵌入的 Excel 文件 主要文件的重要部分如下
  • 按元值对 wp_query 进行排序

    我有一个自定义帖子类型 即作品集 我需要能够按元值 即作者姓名 对其进行排序 我已经尝试了几个示例 但没有任何效果 任何帮助将不胜感激 My Code args array post type gt portfolio meta key g
  • 将匿名函数定义为 m 文件函数 4 个输出中的 2 个

    我有一个带有 4 个输出的 m 文件函数 我想定义一个具有相同输入的匿名函数 但只产生四个输出中的两个 这可能吗 AFAIK 您不能仅使用内联匿名函数来执行此操作 因为 Matlab 语法不提供在单个表达式中捕获函数的多个输出并对其进行索引