Es allí una manera más eficiente de generar un 10 kBit (10.000 bits) aleatorio de la secuencia binaria en Python que anexando 0s y 1s en un bucle?

10 kBit como en «diez mil pedazos»? Que normalmente no se llama una «señal». Estás hablando de una forma de onda? Y/o una señal continua de 10.000 bits por segundo o algo? Por favor, aclarar, preferiblemente un montón.

OriginalEl autor Big Puncho | 2012-12-17

2 Comentarios

  1. 10

    Si quieres una secuencia binaria aleatoria, entonces es probablemente más rápida para generar un entero aleatorio en el rango apropiado:

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

    Después de esto realmente depende de lo que usted quiere hacer con su secuencia binaria. Puede consultar cada uno de los bits utilizando operaciones a nivel de bit:

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

    o usted podría utilizar una biblioteca como bitarray o bitstring si quieres hacer la comprobación, ajuste de rebanar etc. más fácil:

    from bitstring import BitArray
    b = BitArray(uint=s, length=10000)
    p, = b.find('0b000000')
    if b[99]:
        b[100] = False
    ...
    Menor ser quisquilloso, pero creo que debe ser de 1 & s >> x)
    De cualquier manera las obras en que se evalúe a True o False el mismo, pero el tuyo es siempre 0 o 1, lo cual supongo que es un poco más ordenado 🙂
    azar.randint(0, 2**n-1) no funciona para n>63: OverflowError: Python int too large to convert to C long
    A mí me funciona, Python 2.7 y 3.5. Son usted seguro de que es exactamente este pedazo de código que da el error? Si es así exactamente que versión de Python y la aplicación estás usando?

    OriginalEl autor Scott Griffiths

  2. 3

    La numpy paquete tiene un subpaquete ‘al azar’, que puede producir matrices de números aleatorios.

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

    Si quieres una matriz de ‘n’ bits aleatorios, puede utilizar

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

    … pero dependiendo de lo que están haciendo con ellos, puede ser más eficaz el uso de por ejemplo,

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

    para obtener un conjunto de » n » números, cada uno con 16 bits aleatorios; luego

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

    se convierte en una cadena de 2*n de caracteres que contiene el mismo de bits aleatorios.

    En realidad la forma correcta de crear una matriz de ‘n’ bits aleatorios utilizando numpy es: arr = numpy.azar.randint(2, size=(n, a))
    Gracias, corregido.

    OriginalEl autor greggo

Dejar respuesta

Please enter your comment!
Please enter your name here