Channel Breakout Bot for bitflyer-FX (by Connie-Wild氏)読解メモ45
の続きです。
題材は https://github.com/Connie-Wild/ChannelBreakoutBot です。
describeメソッドの続きから。
if useBlackList:
bl = read_blacklist()
co = bl.columns.values
is_blacklist = ((bl[co[0]] == m) &
(eq(bl[co[1]], i[0])) &
(eq(bl[co[2]], i[1])) &
(eq(bl[co[3]], j[0])) &
(eq(bl[co[4]], j[1])) &
(eq(bl[co[5]], k[1])) &
(eq(bl[co[6]], k[0])) &
(eq(bl[co[7]], l[0])) &
(eq(bl[co[8]], l[1]))).any()
前回はi,j,k,lに入る要素について明らかにしました。
今回はbit演算部分を追います。
def eq(a, b):
return (a == b) | (pd.isnull(a) & pd.isnull(b))
eqメソッドでは(a == b)の一致判定とpd.isnull(a) & pd.isnull(b)のbit演算が行われています。
例えば
>>> a = 1
>>> b = 1
>>> (a == b) | (pd.isnull(a) & pd.isnull(b))
True
>>> a = None
>>> b = None
>>> (a == b) | (pd.isnull(a) & pd.isnull(b))
True
>>> a = 1
>>> b = None
>>> (a == b) | (pd.isnull(a) & pd.isnull(b))
False
となります。
これを全てのconfig値で試行してさらにbit演算することでこの設定組み合わせの一部がblacklistに載っているかを確認します。
しかしこれだと.any()の謎が解けません。
これはおそらくnumpy array.any() だと思うのですが、単なるTrue, Falseの値はnumpy配列ではありません。
csvでpandasから読み込んだ bl[co[1]] の値がnumpy配列になっているのかもしれません。
15分経ったので今日はここまで。
↓次
この記事が気に入ったらサポートをしてみませんか?