1988年に初リリースされた Mathematica は、現在では約6000個の組み込み関数が搭載されており、多くの技術計算の分野で卓越した機能を備えた科学技術計算ソフトとなっています。図1は Mathematica がカバーする主な分野を示しており、一つのソフトでこれだけの分野を全て網羅しています※。
※制御系に関しては System Modeler という MBD (Model Based Development) ソフトと組み合わせて使用します。
![]() |
Mathematica のコアには Wolfram 言語というプログラム言語があります。Wolfram 言語へのアクセスは Mathematica の GUI 上からだけではなく、Python ライブラリである Wolfram Client Library for Python を用いることによって外部からアクセスして使用することができます。Python は近年、急激に普及している言語で、様々なライブラリがあることから数値計算などの用途にも多く用いられています。このような背景から、計算能力の不足分を補うために、Python との連携用 API (Application Programming Interface) を搭載している科学技術計算ソフト(例えば、CAE のプリポストソフトなど) が増えています。本記事の目的は Wolfram Client Library for Python と他ソフトをどのように連携させるか、その一部を紹介することにあります。例えば、連携させる方法としては次の2つのものが考えられます。
なお、2つの図中には本記事中で主にご紹介する部分が赤い破線で示されています。本記事では「Python を介した Wolfram 言語と外部環境の連携」の下準備として、図2に関しては赤い破線部分の「Mathematica 上で Python を使用する」について、図3に関しては赤い破線部分の「外部環境の Python から Wolfram 言語を使用する」について紹介します。
![]() |
![]() |
Mathematica 上では、Python スクリプトを直接入力するのではなく、ExternalEvaluate
という関数を用いて実行します。ExternalEvaluate
用に Python を設定する方法に関しては下記を参照してください。
ExternalEvaluate
を用いて Python スクリプトを実行するには次のようにします。例えば、Mathematica で計算している途中で Python による結果が必要な時に便利な機能です。下記は 1+1=2 を計算するという単純な Python スクリプトを実行するものです。下記は、そのままコピーして Mathematica の Notebook に貼り付ければそのまま使用することができます。
data
に入力する場合のスクリプト
data = ExternalEvaluate["Python", "
dat=1+1
dat
"] // Normal (*//Normal は数値データとして出力するために必要*)
datain
を Python に取り込み、dataout
として出力する場合のスクリプト
datain=1+1
dataout = ExternalEvaluate["Python", "
dat=<*datain*> #Mathematica の変数を使用する場合は<**>で囲む
dat
"] // Normal
Python 上で Wolfram 言語を使用する場合は、Mathematica の他に Wolfram 言語を動かすための Wolfram Client Library for Python が必要になります。インストールに関しては下記を参照してください。
Wolfram 言語を組み込んだアプリケーションを開発した場合、オープンソースソフトとして無償で開発し、配布することもできますが、開発したオープンソースソフトを使用する際は使用者がライセンスを購入する必要があります。
「2.Mathematica 上で Python を使用する方法」で紹介した、「1+1=2」のような簡単な計算を Wolfram 言語で直接行う場合は evaluate
を使用します。主なフローは下記のようになります。
from wolframclient.evaluation import WolframLanguageSession # (1)
session = WolframLanguageSession() # (2) input = "1+1" # (3) output = session.evaluate(input) # (4) print(output) # (5)
また、Python で設定したデータを引数として Wolfram 言語に渡すこともできます。下記は5点の座標点を Python 上で設定し、Wolfram 言語の関数 Predict
に渡してガウス過程回帰を行った結果です。まず、WolframLanguageSession
の他に、Wolfram 言語関数を実行するために wl
を、その引数に変換するために wlexpr
をインポートします。主なフローは下記のようになります。なお、スクリプトでは NumPy, matplotlib を使用しますので、次のリンクを参照し、予めインストールしておいてください。
numpy
、グラフ描画に matplotlib
をインポートWolframLanguageSession
をインポートwl
, wlexpr
をインポートwlexpr
で 7. を Wolfram 言語関数用の引数に変換Predict
でガウス過程回帰のモデルを作成import numpy as np # (1) import matplotlib.pyplot as plt # (1) from wolframclient.evaluation import WolframLanguageSession # (2) from wolframclient.language import wl, wlexpr # (3) session = WolframLanguageSession() # (4) x_r=[-1.2, 0, 1.1, 3.1, 4.5] # (5) y_r=[1.2, 1.4, 1.6, 1.8, 1.6] # (6) x_r2='{' + str(x_r).strip('[]') + '}' # (7) y_r2='{' + str(y_r).strip('[]') + '}' # (7) data =wlexpr( x_r2 + '->' + y_r2 ) # (8) p = wl.Predict(data, wlexpr('Method -> "GaussianProcess"')) # (9) x_p=np.arange(-1,5,0.2) #(10) y_p=session.evaluate(p(x_p)) # (11) plt.style.use('_mpl-gallery') fig, ax = plt.subplots() ax.plot(x_r, y_r,'o') ax.plot(x_p, y_p,) ax.set(xlim=(-2, 5), ylim=(1, 2)) plt.show() # (12) session.terminate() # (13)
今回は Python 経由で Wolfram 言語を利用する方法について述べました。今後は実際に他のソフトと連携させるケースついて述べたいと思います。