如何理解matlab中defaule链接函数内部的linkagemex函数
how to understand the linkagemex function inside of the defaule linkage function in matlab
我需要在matlab中重写联动函数。现在,当我检查它时,我意识到其中有一个名为 linkagemex 的方法。但是我根本无法进入这个方法来查看它的代码。谁能帮我解决这个奇怪的情况?
function Z= linkage (Y, method, pdistArg, varargin)
Z=linkagemex(Y,method);
PS。我觉得自己学的还不错,但是matlab就没那么好学了。如果您有很好的参考资料可以很好地学习它,请随时告诉我。非常感谢您的时间和关注。
您遇到了一个 MEX 函数,"are dynamically linked subroutines that the MATLAB interpreter loads and executes"。由于这些子例程是本机编译的,因此您无法进入它们。另请参阅有关 MEX functions.
的 MATLAB 文档
作为@m.s。提到,您发现了对 MEX 函数的调用。 MEX 函数作为 C 代码实现,该代码被编译为可由 MATLAB 调用的函数。
如您所见,您无法进入此方法(因为它是编译的 C 代码,而不是 MATLAB 代码),并且您无权访问 C 源代码,因为它没有随附MATLAB.
通常情况下,您在这里会陷入死胡同。幸运的是,linkagemex
并非如此。您会注意到 linkage.m
的第 240 行,它实际上进行了测试以查看 linkagemex
是否存在。如果不是,它会调用本地子函数 linkageold
.
我想你可以假设 linkageold
做的事情至少与 linkagemex
大致相同。您可能想用一些合适的输入参数来测试它们,看看它们是否给出相同的结果。如果是这样,那么您应该能够使用 linkageold
而不是 linkagemex
.
中的代码重写 linkage
我将更笼统地发表评论,与您的 PS 相关。在过去的几天里,我一直在回答你的一些问题——你看起来确实是一个学得很快的人。但这并不是说 MATLAB 真的很难学 - 你应该意识到你正在尝试的事情(重写 phytree
的聚类行为)即使对于非常高级的用户来说也不是一件容易的事。
MathWorks 以一种使其(希望)易于使用的方式编写他们的东西 - 但不一定以一种使用户易于扩展或修改的方式。有时他们出于性能原因做一些事情,使您无法修改,正如您在 linkagemex
中发现的那样。此外,phytree
是使用不再正确记录的旧式 OO 编程实现的,因此即使您有代码,也很难弄清楚它的作用,除非您碰巧一直在使用多年来一直使用 MATLAB 并记住旧样式的工作原理。
我的建议是,您可能会发现从头开始实施自己的聚类方法比尝试在 phytree
之上构建更容易。在您前进的道路上,您还会遇到很多更令人头疼的事情,而且您将学到的大部分内容是 phytree
是以一种晦涩的老式方式实现的。如果您借此机会从头开始实现自己的东西,您可能会学习如何使用更现代的 OO 方法来实现事物,这在将来对您更有用。
不过你的电话,这只是我的想法。如果您选择继续 phytree
路线,我很乐意继续尝试回答问题。
我需要在matlab中重写联动函数。现在,当我检查它时,我意识到其中有一个名为 linkagemex 的方法。但是我根本无法进入这个方法来查看它的代码。谁能帮我解决这个奇怪的情况?
function Z= linkage (Y, method, pdistArg, varargin)
Z=linkagemex(Y,method);
PS。我觉得自己学的还不错,但是matlab就没那么好学了。如果您有很好的参考资料可以很好地学习它,请随时告诉我。非常感谢您的时间和关注。
您遇到了一个 MEX 函数,"are dynamically linked subroutines that the MATLAB interpreter loads and executes"。由于这些子例程是本机编译的,因此您无法进入它们。另请参阅有关 MEX functions.
的 MATLAB 文档作为@m.s。提到,您发现了对 MEX 函数的调用。 MEX 函数作为 C 代码实现,该代码被编译为可由 MATLAB 调用的函数。
如您所见,您无法进入此方法(因为它是编译的 C 代码,而不是 MATLAB 代码),并且您无权访问 C 源代码,因为它没有随附MATLAB.
通常情况下,您在这里会陷入死胡同。幸运的是,linkagemex
并非如此。您会注意到 linkage.m
的第 240 行,它实际上进行了测试以查看 linkagemex
是否存在。如果不是,它会调用本地子函数 linkageold
.
我想你可以假设 linkageold
做的事情至少与 linkagemex
大致相同。您可能想用一些合适的输入参数来测试它们,看看它们是否给出相同的结果。如果是这样,那么您应该能够使用 linkageold
而不是 linkagemex
.
linkage
我将更笼统地发表评论,与您的 PS 相关。在过去的几天里,我一直在回答你的一些问题——你看起来确实是一个学得很快的人。但这并不是说 MATLAB 真的很难学 - 你应该意识到你正在尝试的事情(重写 phytree
的聚类行为)即使对于非常高级的用户来说也不是一件容易的事。
MathWorks 以一种使其(希望)易于使用的方式编写他们的东西 - 但不一定以一种使用户易于扩展或修改的方式。有时他们出于性能原因做一些事情,使您无法修改,正如您在 linkagemex
中发现的那样。此外,phytree
是使用不再正确记录的旧式 OO 编程实现的,因此即使您有代码,也很难弄清楚它的作用,除非您碰巧一直在使用多年来一直使用 MATLAB 并记住旧样式的工作原理。
我的建议是,您可能会发现从头开始实施自己的聚类方法比尝试在 phytree
之上构建更容易。在您前进的道路上,您还会遇到很多更令人头疼的事情,而且您将学到的大部分内容是 phytree
是以一种晦涩的老式方式实现的。如果您借此机会从头开始实现自己的东西,您可能会学习如何使用更现代的 OO 方法来实现事物,这在将来对您更有用。
不过你的电话,这只是我的想法。如果您选择继续 phytree
路线,我很乐意继续尝试回答问题。