9

ループに0と1を追加するよりも、Pythonで10 kBit (10,000ビット)のランダムなバイナリシーケンスを生成する効率的な方法はありますか?

4

3 に答える 3

12

ランダムなバイナリシーケンスが必要な場合は、適切な範囲でランダムな整数を生成するのがおそらく最も速いでしょう:

import random
s = random.randint(0, 2**10000 - 1)

この後は、バイナリシーケンスで何をしたいかによって異なります。ビット演算を使用して個々のビットをクエリできます。

s & (1 << x)  # is bit x set?

または、チェック、スライスの設定などを簡単にしたい場合は、bitarraybitstringなどのライブラリを使用できます。

from bitstring import BitArray
b = BitArray(uint=s, length=10000)
p, = b.find('0b000000')
if b[99]:
    b[100] = False
...
于 2012-12-17T21:51:04.680 に答える
5

numpy パッケージには、乱数の配列を生成できるサブパッケージ「random」があります。

http://docs.scipy.org/doc/numpy/reference/routines.random.html

「n」個のランダムビットの配列が必要な場合は、使用できます

arr = numpy.random.randint(2, size=(n,))

...しかし、それらを使って何をしているかによっては、たとえば使用する方が効率的かもしれません

arr = numpy.random.randint(0x10000, size=(n,))

それぞれ 16 のランダムなビットを持つ「n」個の数値の配列を取得します。それから

rstring = arr.astype(numpy.uint16).tostring()

これを、同じランダム ビットを含む 2*n 文字の文字列に変換します。

于 2012-12-22T19:17:21.743 に答える