在 Google Colab 中的 *.m (Matlab) 文件上使用 Oct2Py 后未定义“exists_or_mkdir”

问题描述

我一直在研究如何在 Google Colab 中运行 Matlab 文件

我已将 Octave (apt install Octave) 安装到我的 Colab 中。但是尝试使用 .m 运行我的 !octave -W make_video.m 文件然后刚刚返回

parse error near line 91 of file /content/drive/testing/catdeform/code/util/figure_code/make_video.m

  nested functions not implemented in this context

>>> function [shape] = load_shape(res_dir,anchor_coords,anchors)
           ^

error: source: error sourcing file '/content/drive/testing/catdeform/code/util/figure_code/make_video.m'make_video.m'

然后我做了!pip3 install oct2py

然后进入 .m 文件所在的目录并执行:

from oct2py import Oct2Py 
oc = Oct2Py
oc.make_video

得到输出"make_video" Octave function

然后我又做了 !octave -W make_video.m 并得到:

error: 'exists_or_mkdir' undefined near line 51 column 1
error: called from
    make_video at line 51 column 1

我可能做错了什么?也许有比尝试使用 Octave/oct2py 在 Google Colab 中运行 matlab 文件更好的方法

解决方法

这里有几件事要说,但让我们从显而易见的开始。

应该是

oc = Oct2Py()

不是

oc = Oct2Py

第一个创建一个 Oct2Py 实例(这显然是你想要的),第二个只是创建一个 Oct2Py 类定义的别名。

请注意,oct2py 包提供了一个已经实例化的单例实例供您使用,oct2py.octave。所以你可以简单地做:

from oct2py import octave
octave.make_video

话虽如此,让我们解决一些其他问题。

  • Oct2Py 不运行“matlab”脚本。它运行“八度”脚本。这不是一个小问题。虽然两者之间有很大的重叠,但它们并不是 100% 兼容的。如果您想确保您的“matlab”脚本与“octave”兼容,请先尝试在本地 Octave 安装上运行它。

  • 示例:您得到的错误是八度音程错误,而不是 Colab 错误。在 matlab 允许的所有上下文中,octave 的早期版本并不完全支持嵌套函数。因此你得到了这个错误。显然,在最新的八度音阶版本 6.1.0 中,这应该不再是问题。但是,您的“内核”可能依赖于较旧的八度音程。是否可以以某种方式将 Colab 指向 Octave 6.1.0 内核/实例?