Drkcore

12 01 2010 Python PCI Tweet

pythonでタニモト係数を計算

pythonで01の文字列を10進数に変換するには

int('101',2) # 5

とできるので、あとは、C=(A&B)としてC/(A+B-C)という式で1のビットを数えあげればタニモト係数は求まる。

ビットの数え上げはシフト演算子を使ってやればよさげ。

>>> def cb(x):
...   count = 0
...   while(x!=0):
...     count += x & 1
...     x >>= 1
...   return count

こんな感じでOKと思うんだけど大きい数字を与えた場合に11LとかLがついてくるのが気持ち悪い。

タニモト係数はさっきの関数を利用して

>>> a = int('10111',2)
>>> b = int('11010',2)
>>> float(cb(a&b))/(cb(a)+cb(b)-cb(a&b))
0.40000000000000002

さくっと求まりそうだ。

About

  • もう5年目(wishlistありマス♡)
  • 最近はPythonとDeepLearning
  • 日本酒自粛中
  • ドラムンベースからミニマルまで
  • ポケモンGOゆるめ

Tag

Python Deep Learning javascript chemoinformatics Emacs sake and more...

Ad

© kzfm 2003-2021