Origin Cから Python関数を呼び出す
次のシンタックスを使用して、Origin CからPython関数を呼び出せます。
Python.function_name(arg1, arg2...)
デフォルトでは、C/CPPまたはXFファイルと同じフォルダに.pyファイルを置く必要があります。ファイル名はorigin.pyにしてください。
サンプル - ベイズ回帰を実行するPython関数
import numpy as np
import pandas as pd
import originpro as op
from sklearn import linear_model
def bayesian(vX, vY):
blr = linear_model.BayesianRidge(tol=1e-6, fit_intercept=True, compute_score=False, alpha_init=1, lambda_init=1e-3)
blr.fit(np.vander(vX, 10), vY)
mean = blr.predict(np.vander(vX, 10))
return mean
その後OCコードから関数を呼び出せます。
void bayesian_reg()
{
// 3列あるワークシートをアクティブにする
// 列1と2はそれぞれフィットを実行するX、Yデータ
// 列3にはフィット曲線の結果を出力する
Worksheet wks=Project.ActiveLayer();
Dataset dsx, dsy, dsypred;
dsx.Attach(wks, 0);
dsy.Attach(wks, 1);
dsypred.Attach(wks, 2);
dsypred = Python.bayesian(dsx, dsy);
}
複数の変数は、引数を使ってPython関数から返せます。引数名の前の&記号は、それが返された変数であることを示します。
Python.function_name(arg1, arg2..., & ret1, & ret2...)
サンプル - フィット値とフィット誤差を返すベイズ回帰を実行するPython関数
import numpy as np
import pandas as pd
import originpro as op
from sklearn import linear_model
def bayesian(vX, vY, vYmean, vYstd):
blr = linear_model.BayesianRidge(tol=1e-6, fit_intercept=True, compute_score=False, alpha_init=1, lambda_init=1e-3)
blr.fit(np.vander(vX, 10), vY)
mean, std = blr.predict(np.vander(vX, 10), return_std=True)
vYmean[:] = mean # 変数vYmeanに平均値を渡す
vYstd[:] = std # 変数vYstdに誤差の値を返す
その後OCコードから関数を呼び出せます。
void bayesian_reg()
{
// 4列あるワークシートをアクティブにする
// 列1と2はそれぞれフィットを実行するX、Yデータ
// 列3と4にはフィット曲線結果とフィット誤差を出力
Worksheet wks=Project.ActiveLayer();
Dataset dsx, dsy, dsypred, dsystd;
dsx.Attach(wks, 0);
dsy.Attach(wks, 1);
dsypred.Attach(wks, 2);
dsystd.Attach(wks, 3);
vector vYmean, vYstd;
Python.bayesian(dsx, dsy, &vYmean, &vYstd);
dsypred = vYmean;
dsystd = vYstd;
}
ファイルの位置を変更するには、LabTalkのPythonオブジェクトプロパティである、Python.OCWD$を目的のフォルダ(作業ディレクトリ)のフルパスに設定します。
ファイル名を変更するには、LabTalkのPythonオブジェクトプロパティである、Python.OCWF$を作業ディレクトリ内の目的のファイル名に設定します。
|