python - 在 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 错误。早期版本的 octave 没有完全支持 matlab 允许的所有上下文中的嵌套函数。因此,您收到此错误。显然,在最新的 octave 版本 6.1.0 中,这应该不再是问题。但是,您的“内核”可能依赖于较旧的八度。是否可以以某种方式将 Colab 指向 Octave 6.1.0 内核/实例?
推荐阅读
- c# - 显示 OAuth 2 新令牌(仅用于测试)
- javascript - Img src="blob:http://localhost... 不起作用 - createObjectURL 或 readAsDataURL | Firebase | Vue.js 都不起作用
- python - 如何允许权限以便我可以运行我的 python 服务器?
- r - 在 R 中使用 biomart 循环
- javascript - 全日历选择和取消选择日期
- ios - 在 SwiftUI 小部件中添加观察者的位置
- python - 如何将函数中的点转换为列表以绘制完整的图表?
- mysql - 使用表字段作为存储过程参数(将给定的表字段重新分配到其他表中)
- javascript - 如何在 React 中对 HTML 表格进行排序?
- arrays - 是否有 Array 和 ArraySlice 都实现的快速协议