【问题标题】:What is the @ symbol used for in Octave?Octave中的@符号是什么?
【发布时间】:2019-03-03 21:59:35
【问题描述】:

Octave 中的@符号是干什么用的?

例如在代码中:

[theta, cost] = fminunc(@(t)(costFunction(t, X, y)), initial_theta, options);

我对代码的作用有一个大致的了解,但我不明白 @(t) 的用途。我查看了 octave 文档,但 @ 符号似乎很难搜索。

【问题讨论】:

  • @CrisLuengo 我搜索了 Octave,因为这就是我正在使用的。我得到的答案参考了 Octave 手册和 Octave 内置帮助。您链接到的问题是关于我不使用的不同程序,并且它的答案参考了 MATLAB 文档,而不是 Octave 的。我不认为这是重复的。我不会找到搜索这个答案的答案。
  • 重复问题也不错。它们是指向良好答案的指针。除非这个问题指向它,否则你不会找到那个答案。这就是我们标记为重复的原因。当然,MATLAB 是一个不同的程序,但 Octave 的使命是复制 MATLAB 的语法,因此阅读 MATLAB 文档是了解 Octave 的一种非常好的方式。 MATLAB 有出色的文档。
  • @CrisLuengo 当然,我经常欣赏指向其他答案的重复标志。我只是觉得,在这种情况下,即使答案相似,问题也不同。我收到的答案更侧重于我正在使用的内容。无论哪种方式都很好。
  • @CrisLuengo 有人对这种评论感到恼火:Octave 是一种与 matlab 不同的语言(尽管它尽一切努力保持相同)。 Stack Overflow 给它一个单独的标签。据我所知,这些问题没有交叉列出。为什么一个有好问题的人必须看两个地方?我希望我们花更多的时间来回答问题,而不是花更少的时间来确定一个问题是否重复

标签: octave


【解决方案1】:

从控制台:

octave:1> help @

 -- @
     Return handle to a function.

     Example:

          f = @plus;
          f (2, 2)
          =>  4

     (Note: @ also finds use in creating classes.  See manual chapter
     titled Object Oriented Programming for detailed description.)

     See also: function, functions, func2str, str2func.

手册中的更多信息:https://octave.org/doc/interpreter/Function-Handles.html


在您的特定代码中,“@”语法用于创建函数的“现场”实现(以匿名函数的形式),该实现采用 单个参数,而不是您的costFunction 所需的三个。这是因为 fminunc 需要一个接受单个参数的函数来工作,因此可以有效地将更复杂的函数“包装”成与 fminunc 兼容的更简单的函数。

【讨论】:

    【解决方案2】:

    @在匿名函数的定义中放在哑变量之前,例如:

    f = @(x) x.^2;
    y=[1:3];
    f(y)
    

    返回

    1 4 9
    

    快速查看帮助 fminunc 表明您的示例中的 FCN 是 @(t)(costFunction(t, X, y))

    【讨论】:

      猜你喜欢
      • 2012-04-19
      • 2012-07-01
      • 2011-03-20
      • 2018-09-20
      • 2015-02-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多