Help us understand the problem. What is going on with this article?

Wolfram Client Library for Python の使い方

Sympyとどう違うのか疑問に思ったため学習メモとして残します。

これはなに?

Mathematica の組込み関数をPythonで使用可能にするライブラリ

正確には Wolfram言語をPythonから使用可能にするライブラリです。
仕組みとしては Wolfram Engineをローカルで起動してPythonから指令を投げるようです。

Mathematicaと言えばMapleとしのぎを削る代数(文字式)計算ソフト
Pythonでは同様の事をするライブラリとしてSympyが既に存在します。

結論

  • WolframEngineのPythonインターフェースである
  • Sympyのようなシンボリック変数定義は出来ない(関数をPython変数に格納は出来る)
  • Wolfram言語の約6000の組込み関数群が使用可能 1
  • 文字列のWolfram言語の式を評価可能
  • 素のままではJupyterに数式表示は出来ない(致命傷)

Sympyとは住み分けというか出来ることが違います。

文字式を定義して解きたい方はWolfram Engineをそのまま使用されることをお勧めします。

インストール

pipでインストールできます。

pip install wolframclient

こちらの環境は WSL(Ubuntu 18.04.2 LTS) + Pipenv + Python 3.6.8 です。
Wolfram Engine (12.0) インストール済です。

WSLにインストールする際はlibasound2を入れていないとエラーとなるやもしれません。

apt-get install libasound2 

こちらが公式ブログの記事になります。
https://blog.wolfram.com/2019/05/16/announcing-the-wolfram-client-library-for-python/

また、呼び出される関数はMathematicaのドキュメントを参照してください。
https://reference.wolfram.com/language/#コアとなる言語と構成

使用例

from wolframclient.evaluation import WolframLanguageSession
from wolframclient.language import wl, wlexpr
session = WolframLanguageSession()

wlは式を評価せず, 評価前の式を出力します。

>>> wl.Select(wl.PrimeQ, wl.Range(5))
Select[PrimeQ, Range[5]]

この構文は間違っているため, evaluateで式を評価した場合エラーとなります。

>>> session.evaluate(wlexpr('Select[PrimeQ,Range[5]]'))
Nonatomic expression expected at position 1 in Select[PrimeQ, {1, 2, 3, 4, 5}].
Select[PrimeQ, PackedArray([1, 2, 3, 4, 5], dtype=int8)]

正しい構文に直した場合が以下の式です。

>>> session.evaluate(wlexpr('Select[Range[5],PrimeQ]'))
PackedArray([2, 3, 5], dtype=int8)

これはMathematicaの挙動と一致しております。(Mathematica 11.3)
62e34ef5037dc6c2d850b67afd86b843.png
339511866a171ef220a0aa458fb26abb.png

今回使用した Select 関数は https://reference.wolfram.com/language/ref/Select.html?
PrimeQは https://reference.wolfram.com/language/ref/PrimeQ.html.ja

数式の表示

数式の表示法については調査中です。Wolfram Engineでは正常に表示できているので表示法はあると思いますが

Wolfram Engineの場合(Jupyter Lab)

TransferFunctionModel[
StateSpaceModel[{{{Subscript[a, 11], Subscript[a, 12]}, {Subscript[a,
21], Subscript[a, 22]}}, {{Subscript[b, 11]}, {Subscript[b,
21]}}, {{Subscript[c, 11], Subscript[c, 12]}}, {{0}}},
SamplingPeriod ->None, SystemsModelLabels -> None], s]

image.png

Wolfram Client Library for Pythonの場合(Jupyter Lab)

>>> session.evaluate(wlexpr('TransferFunctionModel['\
'StateSpaceModel[{{{Subscript[a, 11], Subscript[a, 12]}, {Subscript[a,'\
'21], Subscript[a, 22]}}, {{Subscript[b, 11]}, {Subscript[b,'\
'21]}}, {{Subscript[c, 11], Subscript[c, 12]}}, {{0}}},'\
'SamplingPeriod ->None, SystemsModelLabels -> None], s]'))
TransferFunctionModel[(((Plus[Times[Global`s, Subscript[Global`b, 11], Subscript[Global`c, 11]], Times[-1, Subscript[Global`a, 22], Subscript[Global`b, 11], Subscript[Global`c, 11]], << 2 >>, Times[Global`s, Subscript[Global`b, 21], Subscript[Global`c, 12]], Times[-1, Subscript[Global`a, 11], Subscript[Global`b, 21], Subscript[Global`c, 12]]],),), Plus[Power[Global`s, 2], Times[-1, Global`s, Subscript[Global`a, 11]], << 1 >>, Times[-1, Global`s, Subscript[Global`a, 22]], Times[Subscript[Global`a, 11], Subscript[Global`a, 22]]]), Global`s]
sasaya
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした