【发布时间】:2023-04-07 19:52:01
【问题描述】:
table() 自 R2013b 以来一直是 MATLAB 中的标准函数。据我从文档中可以看出,与 sum、cell、struct 或任何其他 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”工具箱中的函数。