【问题标题】:Interoperability advice - Python, C, Matplotlib/OpenGL run-time efficency互操作性建议 - Python、C、Matplotlib/OpenGL 运行时效率
【发布时间】:2014-07-12 05:44:38
【问题描述】:

现状:

  • C 代码被重写,每次都进行几乎相同类型的模拟(老鼠的学习行为)
  • 为每次模拟编写 Matlab 代码以绘制结果(2D,可能是 3D 图)

这是我的目标:

  • 允许我构建动态模拟器的设计 GUI (wxPython)
  • GUI 还通过 OpenGL(或者可能是 Matplotlib)显示模拟结果
  • 使用 C 包装器 (CFFI) 运行模拟并将结果(平均值)发送到 OpenGL 或 Matplotlib

问题:

  • 为了让该软件尽可能高效地运行,对我来说应该使用 CFFI 来运行模拟是有意义的...我不确定是否拥有该 FFI 实例会更好(或单独的?)使用 OpenGL C 绑定来完成所有图形处理并将生成的图形传递到 Python 层以在 GUI 中显示,或者让 CFFI 发送模拟的平均值(被绘制的数据)到 Python 级别的变量,并使用 PyOpenGL 或 Matplotlib 绘制图形。

【问题讨论】:

    标签: python c opengl interop python-cffi


    【解决方案1】:

    了解模拟运行的周转时间以及您希望显示和更新图表的速度会有所帮助。或多或少是实时的,每个几十毫秒?秒?分钟?

    如果你想绘制图形,我会推荐 Matplotlib 而不是 OpenGL。即使自己破解 Matplotlib 代码以使其完全按照您的意愿进行操作,也可能仍然比在 OpenGL 中进行操作更容易。而且 Matplotlib 也有“XKCD”风格的图表 :-)

    PyOpenGL 与 wxPython 配合得很好。现代 3D 中的大部分繁琐工作都是由 GPU 完成的,因此如果您决定走这条路,那么用 C 而不是 Python 做 3D 图形可能不值得。

    希望这会有所帮助。

    【讨论】:

    • 感谢您的回复。在与朋友讨论项目设计后,他建议放弃 OpenGL 方面,因为它太低级并且对我的需求来说是不必要的。运行 OSX 让 wxPython 非常痛苦,所以我现在正在使用 PySide 构建 GUI。我将首先让 GUI 打开并运行以前编写的 C 代码模拟及其从以前编写的 MatLab 代码中绘制的结果。然后,我将研究如何使用 Matplotlib 绕过 MatLab 代码,从 C 代码仿真结果中读取基于 GUI 级别指定的参数的图形。
    • 完成后,我会看看是否可以使用 CFFI 根据 GUI 级别指定的参数编写 C 代码,从而无需编写 C 代码,除非它是扩展 CFFI 实现的功能。
    • 另外,为了解决您关于周转时间的问题: * 该程序通常运行 3 或 4 个条件的 50 次模拟(300 次试验的循环)。给定一个条件标志,每个试验调用 3 个函数来更新 5-10 个多维数组(3000 个时间步长 X 试验次数)。在每个条件(300 次试验的循环)结束时,计算多维数组的所有平均值并将它们写入文件(通常为 40-60 个文件)。 * 使用我的 2.4 GHz 和 4GB,运行 5 次模拟需要 1 分 5 秒,所以 50 次模拟可能接近 11 分钟
    • 然后是绘图部分,我认为使用 Matplotlib 会比 Octave 更快。我希望 PySide 具有用于移动 3D 图形等的鼠标和键事件,但这是目前的次要功能
    猜你喜欢
    • 2010-09-26
    • 1970-01-01
    • 1970-01-01
    • 2019-07-15
    • 2010-12-06
    • 2011-12-03
    • 2013-07-27
    • 1970-01-01
    • 2013-04-04
    相关资源
    最近更新 更多