我试图使用genlouvain函数在矩阵中查找社区结构。我说错了 未定义的功能' group_handler'对于' char'。
类型的输入参数genlouvain错误(第272行) group_handler('分配',Y); 不确定是什么问题。我的工作空间中没有任何字符,而且我给出的函数矩阵是对称的......我想知道是否需要在某处定义一个char变量来给它另一个输入?有没有其他人使用genlouvain函数并且有char输入参数的问题?
答案 0 :(得分:1)
genlouvain
不是本机MATLAB函数,我不得不谷歌。我在这里找到了它:http://netwiki.amath.unc.edu/GenLouvain/GenLouvain。
如果查看README文件,它会说代码是用MEX编写的,并且是为64位Mac OS,Windows和Linux预编译的。
您的操作系统可能不是这些,并且README表示如果您的操作系统不是64位,则在运行代码之前需要编译 MEX代码。具体来说,您的操作系统没有预编译的函数,group_handler
是编译代码后生成的函数(检查.zip文件中的private
文件夹)。由于没有针对您的操作系统的group_handler
函数,MATLAB会抱怨,因为它无法找到该文件。
要为您的操作系统生成正确的编译函数,以便运行此代码,请进入MEX_SRC
目录并运行compile_mex.m
脚本。
但是,您需要确保已安装mex
。因此,在运行mex -setup
之前,在命令提示符中键入compile_mex.m
,并确保选择适合您的操作系统的编译器。在Windows中,这很可能是Visual C ++编译器,Mac OS会有自己的gcc
(实际上是clang
),而Linux本身很可能是gcc
。
执行此操作后,您的功能现在应该可以正常工作。
FWIW,如果您真的阅读了README文件,或者访问了网站并查看了常见问题解答,那么您可以从那里得到答案。
答案 1 :(得分:1)
我提出了这个问题的第二个答案,因为我遇到了同样的错误,尽管我运行的是64位MATLAB:
genlouvain.m
脚本有多个依赖项,保存为C代码,而不是.m脚本(例如group_handler
),您也应该下载它们;确保它们都在您运行genlouvain
脚本的同一文件夹中。