Robert Kern wrote: > On Thu, Feb 12, 2015 at 3:22 PM, Neal Becker <ndbeck...@gmail.com> wrote: >> >> Robert Kern wrote: >> >> > On Thu, Feb 12, 2015 at 3:00 PM, Neal Becker <ndbeck...@gmail.com> > wrote: >> >> >> >> Robert Kern wrote: >> >> >> >> > On Thu, Feb 12, 2015 at 2:21 PM, Neal Becker <ndbeck...@gmail.com> >> > wrote: >> >> >> >> >> >> I need to transmit some data values. These values will be float and >> > long >> >> >> values. I need them encoded into a string of bits. >> >> >> >> >> >> The only way I found so far to do this seems rather roundabout: >> >> >> >> >> >> >> >> >> np.unpackbits (np.array (memoryview(struct.pack ('d', pi)))) >> >> >> Out[45]: >> >> >> array([0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, > 0, >> > 1, >> >> > 0, >> >> >> 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, > 0, >> > 0, >> >> > 0, >> >> >> 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0], >> > dtype=uint8) >> >> >> >> >> >> (which I'm not certain is correct) >> >> >> >> >> >> Also, I don't know how to reverse this process >> >> > >> >> > You already had your string ready for transmission with >> > `struct.pack('d', >> >> > pi)`. >> >> > >> >> > -- >> >> > Robert Kern >> >> >> >> my transmitter wants an np array of bits, not a string >> > >> > Can you provide any details on what your "transmitter" is? >> > >> > -- >> >> My transmitter is c++ code that accepts as input a numpy array of > np.int32. >> Each element of that array has value 0 or 1. > > Ah, great. That makes sense, then. > > def tobeckerbits(x): > return np.unpackbits(np.frombuffer(np.asarray(x), > dtype=np.uint8)).astype(np.int32) > > def frombeckerbits(bits, dtype): > return np.frombuffer(np.packbits(bits), dtype=dtype)[0] > > -- > Robert Kern
Nice! Also seems to work for arrays of values: def tobeckerbits(x): return np.unpackbits(np.frombuffer(np.asarray(x), dtype=np.uint8)).astype(np.int32) def frombeckerbits(bits, dtype): return np.frombuffer(np.packbits(bits), dtype=dtype) << leaving off the [0] x = tobeckerbits (2.7) y = frombeckerbits (x, float) x2 = tobeckerbits (np.array ((1.1, 2.2))) y2 = frombeckerbits (x2, float) -- -- Those who don't understand recursion are doomed to repeat it _______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion