【问题标题】:How can I call builtin functions that aren't builtin?如何调用非内置的内置函数?
【发布时间】:2023-04-07 19:52:01
【问题描述】:

table() 自 R2013b 以来一直是 MATLAB 中的标准函数。据我从文档中可以看出,与 sumcellstruct 或任何其他 builtin function 相比,table 没有什么特别之处。

但是,当我尝试使用 builtin('table',var1,...varN) 运行该函数时,我收到一条错误消息:

使用内置错误

找不到内置函数“表”

进一步研究表明它实际上不被视为内置函数:

which('cell')
built-in (C:\Program Files\MATLAB\R2014b\toolbox\matlab\datatypes\cell)

which('table')
C:\Program Files\MATLAB\R2014b\toolbox\matlab\datatypes\@table\table.m  % table constructor
|
Not builtin

进一步调查:

which cell2mat
C:\Program Files\MATLAB\R2014b\toolbox\matlab\datatypes\cell2mat.m

which mat2cell
C:\Program Files\MATLAB\R2014b\toolbox\matlab\datatypes\mat2cell.m

which table2array
C:\Program Files\MATLAB\R2014b\toolbox\matlab\datatypes\table2array.m

which struct2cell
built-in (C:\Program Files\MATLAB\R2014b\toolbox\matlab\datatypes\@struct\struct2cell)  % struct method

which cell2struct
built-in (C:\Program Files\MATLAB\R2014b\toolbox\matlab\datatypes\@cell\cell2struct)  % cell method

所以,cell 是内置的,而 table 不是。 cell2struct 是内置的,而 cell2mat 不是。

为什么会这样,是否有一种简单的方法可以调用 MATLAB 不认为是内置的重载标准函数?


如果您认为为什么部分“过于宽泛”,请忽略它并跳到问题的最后部分。

【问题讨论】:

  • 由于其使用频率和/或以*.m 文件的形式运行所需的时间,通常会编译内置插件。以前在某个地方有一个技术文档,但我找不到。
  • 有道理 =) 但如果他们编译 cell2mat,编译 cell2struct 是否有意义?
  • 也许吧。但与开发经常发生的情况一样,开发团队可能拥有内部知识,这使得事情不像外部人员看起来那么简单。
  • @StewieGriffin:compiled is not always faster,经常使用不代表应该编译。
  • 当然可以,使用 '-all' 标志并解析返回的元胞数组以查找位于“MATLAB”工具箱中的函数。

标签: matlab built-in


【解决方案1】:

您可以通过以下方式找到本机函数:

allTables = which  ( '-all', 'table' )
allTables(cell2mat(strfind ( allTables, matlabroot )))

它不是万能的,对于某些功能(例如 sum),根文件夹中有很多...

【讨论】:

    【解决方案2】:

    builtin 的文档页面给出了明确的定义:

    内置函数是 MATLAB 可执行文件的一部分。 MATLAB 未在 MATLAB 语言中实现这些函数。尽管大多数内置函数都有一个与之关联的 .m 文件,但该文件仅提供函数的文档。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-12
      • 1970-01-01
      • 2014-06-27
      • 1970-01-01
      相关资源
      最近更新 更多