2016-05-18 5 views
4

ファイルに出力されるPythonスクリプトを作成しました。 これはMathematicaによって入力ファイルとして読み込まれ、いくつかの操作に使用され、最後に別の出力ファイルを返します。 さらに、この最後のファイルは、同じ初期のPythonスクリプトによって読み込まれ、より多くの操作が実行されます。PythonからMathematicaに戻って

私の質問です:それを行うための最も簡単な(しかし効率的な)方法は何ですか?

私が扱っていることの次の(非常に単純化された)例を書きます。私は私のPythonスクリプトpython_script.pyで始まる:これは"arr.txt"

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

このファイルには、私のMathematicaノートブックnb_Mathematica.nbによって読み込まれるファイルに保存された配列arrを生成します。これは、例えば、別のファイルに保存された順番に、"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スクリプトに戻ることができますか?これを行う方法で

+0

偉大な質問を、答えを受け入れることを忘れないでくださいそれが問題であなたを助けた場合 –

答えて

3

  • 例えば、プレーンテキストファイルへの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

+3

noteこれが関数のように繰り返し呼び出され、パフォーマンスが問題であれば、 'popen'を使うことができます。パイプでデータを渡し、mathematicaを常駐させます。私はOPがこのファイルベースのアプローチを最初に実装し、彼が物事をスピードアップする必要がある場合は戻ってくるよう提案します。 – agentp

関連する問題