Python を介した Wolfram 言語と外部環境の連携

1. はじめに

1988年に初リリースされた Mathematica は、現在では約6000個の組み込み関数が搭載されており、多くの技術計算の分野で卓越した機能を備えた科学技術計算ソフトとなっています。図1は Mathematica がカバーする主な分野を示しており、一つのソフトでこれだけの分野を全て網羅しています

制御系に関しては System Modeler という MBD (Model Based Development) ソフトと組み合わせて使用します。

図1:Mathematica がカバーする分野の例

Mathematica のコアには Wolfram 言語というプログラム言語があります。Wolfram 言語へのアクセスは Mathematica の GUI 上からだけではなく、Python ライブラリである Wolfram Client Library for Python を用いることによって外部からアクセスして使用することができます。Python は近年、急激に普及している言語で、様々なライブラリがあることから数値計算などの用途にも多く用いられています。このような背景から、計算能力の不足分を補うために、Python との連携用 API (Application Programming Interface) を搭載している科学技術計算ソフト(例えば、CAE のプリポストソフトなど) が増えています。本記事の目的は Wolfram Client Library for Python と他ソフトをどのように連携させるか、その一部を紹介することにあります。例えば、連携させる方法としては次の2つのものが考えられます。

  1. Mathematica 上で Wolfram 言語から Python を実行し外部ソフトを操作
    図2で示すように、Python API を持った他ソフトのデータを Mathematica 上から Python で読み込み、Mathematica 上で計算させる。さらに、Python で他ソフトに計算結果を読み込ませる。

  2. 外部環境から Wolfram 言語を実行
    図3に示すように、Jupyter などの外部環境から Python で他ソフトのデータを Wolfram 言語に渡し、Wolfram 言語で計算を実行する。さらに、Python で他ソフト上に計算結果を読み込ませる。

なお、2つの図中には本記事中で主にご紹介する部分が赤い破線で示されています。本記事では「Python を介した Wolfram 言語と外部環境の連携」の下準備として、図2に関しては赤い破線部分の「Mathematica 上で Python を使用する」について、図3に関しては赤い破線部分の「外部環境の Python から Wolfram 言語を使用する」について紹介します。

図 2: Mathematica 上で Wolfram 言語から Python を実行し他ソフトを操作

 

図 3:外部環境から Wolfram 言語を実行

2. Python を介した Wolfram 言語と外部環境の連携方法

2.1. Mathematica 上で Python を使用する

Mathematica 上では、Python スクリプトを直接入力するのではなく、ExternalEvaluate という関数を用いて実行します。ExternalEvaluate 用に Python を設定する方法に関しては下記を参照してください。

ExternalEvaluate を用いて Python スクリプトを実行するには次のようにします。例えば、Mathematica で計算している途中で Python による結果が必要な時に便利な機能です。下記は 1+1=2 を計算するという単純な Python スクリプトを実行するものです。下記は、そのままコピーして Mathematica の Notebook に貼り付ければそのまま使用することができます。

2.2. 外部環境の Python から Wolfram 言語を使用する

Python 上で Wolfram 言語を使用する場合は、Mathematica の他に Wolfram 言語を動かすための Wolfram Client Library for Python が必要になります。インストールに関しては下記を参照してください。

Wolfram 言語を組み込んだアプリケーションを開発した場合、オープンソースソフトとして無償で開発し、配布することもできますが、開発したオープンソースソフトを使用する際は使用者がライセンスを購入する必要があります。

「2.Mathematica 上で Python を使用する方法」で紹介した、「1+1=2」のような簡単な計算を Wolfram 言語で直接行う場合は evaluate を使用します。主なフローは下記のようになります。

  1. WolframLanguageSession をインポート
  2. Wolfram Engine がインストールされている場所を自動で認識し、計算カーネルが起動
  3. 計算式を文字列として入力
  4. Wolfram 言語で計算を実行
  5. 結果を出力

また、Python で設定したデータを引数として Wolfram 言語に渡すこともできます。下記は5点の座標点を Python 上で設定し、Wolfram 言語の関数 Predict に渡してガウス過程回帰を行った結果です。まず、WolframLanguageSession の他に、Wolfram 言語関数を実行するために wl を、その引数に変換するために wlexpr をインポートします。主なフローは下記のようになります。なお、スクリプトでは NumPy, matplotlib を使用しますので、次のリンクを参照し、予めインストールしておいてください。

  1. 配列処理に numpy、グラフ描画に matplotlib をインポート
  2. WolframLanguageSession をインポート
  3. wl, wlexpr をインポート
  4. Wolfram Engine がインストールされている場所を自動で認識し、計算カーネルが起動
  5. x 座標データを入力
  6. y 座標データを入力
  7. 5. 6. のデータを整形
  8. wlexpr で 7. を Wolfram 言語関数用の引数に変換
  9. Predict でガウス過程回帰のモデルを作成
  10. x=-1~5 の間を 0.2 間隔で分割
  11. 10. のデータを 9. のモデルを用いてガウス過程回帰
  12. グラフ描画
  13. 計算カーネルを終了

4. おわりに

今回は Python 経由で Wolfram 言語を利用する方法について述べました。今後は実際に他のソフトと連携させるケースついて述べたいと思います。