ビットごとのAND演算子を使用でき&
ます。以下を見てみましょう:
x = [1, 2, 3, 4, 5, 6, 7]
y = [i for i in x if i&1]
>>>
[1, 3, 5, 7]
ビットごとのAND演算子は1と共に使用され、その理由は、バイナリで記述された奇数は最初の桁が1でなければならないためです。
23 = 1 * (2**4) + 0 * (2**3) + 1 * (2**2) + 1 * (2**1) + 1 * (2**0) = 10111
14 = 1 * (2**3) + 1 * (2**2) + 1 * (2**1) + 0 * (2**0) = 1110
1のAND演算は、値が奇数である場合にのみ、1を返します(2進数の1も最後の桁が1です)。
詳細については、Python Bitwise Operatorページを確認してください。
PS:データフレームで奇数列と偶数列を選択する場合は、この方法を戦術的に使用できます。顔のキーポイントのx座標とy座標が列x1、y1、x2などとして与えられているとします。x座標とy座標を各画像の幅と高さの値で正規化するには、次のように簡単に実行できます。
for i in range(df.shape[1]):
if i&1:
df.iloc[:, i] /= heights
else:
df.iloc[:, i] /= widths
これは問題に正確に関連しているわけではありませんが、データサイエンティストやコンピュータビジョンエンジニアにとっては、この方法が役立つでしょう。
乾杯!