numpyの配列内の各要素の下2桁を抽出する効率的な方法

マルコス:

このサンプルを検討してください。

sample = np.array([0, 1, 2, 3, 4])

私は内の各値のバイナリ表現の最後の2桁のリスト/配列を生成する最速の方法が必要ですsampleこの方法で私は、バイナリ表現を取得します:

bin_sample = [bin(x) for x in sample]
>>> ['0b0', '0b1', '0b10', '0b11']

私は、このようにそれらのそれぞれを解析し、正しい出力が得られます。

output = [bin(x)[-2:].replace('b','0') for x in sample]
>>> ['00', '01', '10', '11', '00']

問題は、私は、任意の提案を大きな配列を処理しています、それは遅すぎるということですか?感謝

編集:それは周りのかかる5 secondsプロセスに5 million要素。私はそれを取るために必要な~ 1 second ゲインという任意の最適化:EDIT#2 ~ 500%速度増加は、前のアルゴリズムに匹敵する許容です。

ポール・パンツァー:

ここでは、ビットいじるソリューションは以下のとおりです。

def pp():
    a64 = a.astype(np.int64)
    return (((a64&1)<<32)+((a64&2)>>1)+ord('0')*0x100000001).view('U2')

検索正しく行わ:

bits_map = np.array(['00', '01', '10', '11'])
def AMC_pp():
    return bits_map[a & 3]

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=13255&siteId=1