【问题标题】:From Python to Mathematica and back again从 Python 到 Mathematica 再回来
【发布时间】:2016-09-15 15:41:18
【问题描述】:

我编写了一个 Python 脚本,它会生成一个输出到文件的输出。 Mathematica 将其作为输入文件读取,然后使用它进行一些操作,最后返回另一个输出文件。 反过来,最后一个文件应该由相同的初始 Python 脚本读取,以执行更多操作。

我的问题是:最简单(但有效)的方法是什么?

我将在下面写一个(非常简化的)我正在处理的示例。我从我的python脚本python_script.py开始:这会产生一个数组arr,它保存在文件"arr.txt"

import numpy as np 
arr = np.arange(9).reshape(3,3)
np.savetxt('arr.txt', arr, delimiter=' ')

此文件由我的 Mathematica 笔记本 nb_Mathematica.nb 读取。例如,这可以生成另一个数组,然后保存在另一个文件中,"arr2.txt"

file = Import["arr.txt","Table"]
b = ArrayReshape[file, {3,3}]
c = {{1,1,1},{1,1,1},{1,1,1}}
d = b + c
Export["arr2.txt", d]

现在"arr2.txt" 必须由原始 Python 脚本读取。怎么可能做到这一点?特别是如何停止 Python 脚本,启动 Mathematica,然后返回 Python 脚本?

【问题讨论】:

  • 好问题,如果对您有帮助,别忘了采纳答案

标签: python shell import export wolfram-mathematica


【解决方案1】:

正在这样做:

  • 将您的 Mathematica 代码放入纯文本文件中,例如 make_arr.m
  • 使用 Mathematica 的命令行界面:
    • math -script make_arr.m
  • 从 python 调用上面的 subprocess 模块
    • subprocess.call(["math", "-script", "make_arr.m"])

您可以选择在 Mathematica 脚本中使用命令行参数:

file_name = $CommandLine[[4]]

Further to read

【讨论】:

  • 请注意,如果它像函数一样被重复调用并且性能是一个问题,您可以使用popen,通过管道传递数据并保持mathematica 常驻。我建议 OP 先实施这种基于文件的方法,如果他需要加快速度,再回来。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-26
  • 1970-01-01
  • 2014-06-09
  • 1970-01-01
相关资源
最近更新 更多