1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

SymPyで条件分岐をやってみる

Last updated at Posted at 2020-05-24

#はじめに
SymPyで関数のハードコーディングから解放されるでは、cos, sin, expなど単純な関数式を外出しにして、関数のハードコーディングをせずに済む方法について記載した。

今回条件分岐をやってみる。

#やり方
Piecewise関数を使えばよい。

例えば、値が0より小さければ、0、0以上であれば1にするという処理を考えて見る。SymPyでは、こんな式で定義することができるようだ。

Piecewise((0, x < 0), (1, x >= 0))

#前回のコマンドを使ってできるか確認

入力データ

前回と一緒

CMPD_CHEMBLID,exp,smiles
CHEMBL596271,3.54,Cn1c(CN2CCN(CC2)c3ccc(Cl)cc3)nc4ccccc14
CHEMBL1951080,-1.18,COc1cc(OC)c(cc1NC(=O)CSCC(=O)O)S(=O)(=O)N2C(C)CCc3ccccc23
CHEMBL1771,3.69,COC(=O)[C@@H](N1CCc2sccc2C1)c3ccccc3Cl
CHEMBL234951,3.37,OC[C@H](O)CN1C(=O)C(Cc2ccccc12)NC(=O)c3cc4cc(Cl)sc4[nH]3
CHEMBL565079,3.1,Cc1cccc(C[C@H](NC(=O)c2cc(nn2C)C(C)(C)C)C(=O)NCC#N)c1
CHEMBL317462,3.14,OC1(CN2CCC1CC2)C#Cc3ccc(cc3)c4ccccc4
CHEMBL1951182,-.72,COc1cc(OC)c(cc1NC(=O)CCC(=O)O)S(=O)(=O)NCc2ccccc2N3CCCCC3

##関数定義ファイル
こんな感じ。記載方法は前回を参照してほしい。

exp,"Piecewise((0, x < 0), (1, x >= 0))",CLASS

出力結果

CMPD_CHEMBLID,exp,smiles,CLASS
CHEMBL596271,3.54,Cn1c(CN2CCN(CC2)c3ccc(Cl)cc3)nc4ccccc14,1.0
CHEMBL1951080,-1.18,COc1cc(OC)c(cc1NC(=O)CSCC(=O)O)S(=O)(=O)N2C(C)CCc3ccccc23,0.0
CHEMBL1771,3.69,COC(=O)[C@@H](N1CCc2sccc2C1)c3ccccc3Cl,1.0
CHEMBL234951,3.37,OC[C@H](O)CN1C(=O)C(Cc2ccccc12)NC(=O)c3cc4cc(Cl)sc4[nH]3,1.0
CHEMBL565079,3.1,Cc1cccc(C[C@H](NC(=O)c2cc(nn2C)C(C)(C)C)C(=O)NCC#N)c1,1.0
CHEMBL317462,3.14,OC1(CN2CCC1CC2)C#Cc3ccc(cc3)c4ccccc4,1.0
CHEMBL1951182,-0.72,COc1cc(OC)c(cc1NC(=O)CCC(=O)O)S(=O)(=O)NCc2ccccc2N3CCCCC3,0.0

ちゃんと計算できているようだ。

#おわりに
今回は1変数のみからなる条件式だったが、x1の値に応じてx2、x3、x4のいずれかを返すといった複数の変数による複雑な演算も可能だ。可能性は無限大なので試してみよう。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?