ブログ

割とコンピュータよりの情報をお届けします。

2018年9月15日

C言語からPythonの関数呼び出し3

前の記事ではPYTHONHOMEを設定とか言っているがかなり面倒なので,WinAPIのSetEnvironmentVariable()を使って少し改変を図ったという記事である。

改変というのは,SetEnvironmentVariable()を使用すること。windows.hをインクルードして,Py_Initialize();の手前でこの関数を入れてやると前の記事のサンプルを実行する前にPYTHONHOMEを設定する必要が省ける。

SetEnvironmentVariable(
_T("PYTHONHOME"),  // 環境変数の名前
_T("<WinPythonのインストールディレクトリ>\\python-3.7.0.amd64")  // 環境変数の新しい値
);

さらに調べていると,今のバージョンのWinPythonだと実行環境を同じバージョンのPython embeddableに挿げ替えることが可能なようだ。
Python embeddableと同じフォルダに突っ込んで実行すると普通に実行できる。この時PYTHONHOMEの設定はいらない。

≫ 続きを読む

2018/09/15 コンピュータ   TakeMe
タグ:Python

Matlab/GNU OctaveのバックスラッシュをPythonで実施する場合の書き方

Matlab/GNU OctaveのバックスラッシュをPythonで実行する方法にいったん躓いたので記録を残す。

例えば,

2 x + y = 3
2 x - y = 4

という方程式を連立して解きたい場合には。

import numpy as np

x = np.array([\
    [2, 1],\
    [2, -1]]);

y = np.array([\
    [3],\
    [4]]);

A = np.linalg.solve(x, y)
#A = x \ y
print(A)

一応今回は解ける問題なので解は一つ。
1つの解で解けない時の処理がMATLAB / GNU Octaveなどのバックスラッシュ演算と少し違うらしい。
MATLABなどの動作では,同じようにメッセージは出てくれるが,式を満たす解のうち一つは返してくれる。

どちらかというとsolveよりもnumpy.linalg.lstsq()の方が処理として近いかもしれない。

≫ 続きを読む

2018/09/15 コンピュータ   TakeMe
タグ:Python