マルコス:
このサンプルを検討してください。
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]