Is there a available function to convert an int to binary
representation as sequence of 0 and 1?
binary_repr produces strings and is not vectorized
>>> np.binary_repr(5)
'101'
>>> np.binary_repr(5, width=4)
'0101'
>>> np.binary_repr(np.arange(5), width=4)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python26\lib\site-packages\numpy\core\numeric.py", line
1732, in binary_repr
if num < 0:
ValueError: The truth value of an array with more than one element is
ambiguous. Use a.any() or a.all()
------------
That's the best I could come up with in a few minutes:
>>> k = 3; int2bin(np.arange(2**k), k, roll=False)
array([[ 0., 0., 0.],
[ 1., 0., 0.],
[ 0., 0., 1.],
[ 1., 0., 1.],
[ 0., 1., 0.],
[ 1., 1., 0.],
[ 0., 1., 1.],
[ 1., 1., 1.]])
>>> k = 3; int2bin(np.arange(2**k), k, roll=True)
array([[ 0., 0., 0.],
[ 0., 0., 1.],
[ 0., 1., 0.],
[ 0., 1., 1.],
[ 1., 0., 0.],
[ 1., 0., 1.],
[ 1., 1., 0.],
[ 1., 1., 1.]])
-----------
def int2bin(x, width, roll=True):
x = np.atleast_1d(x)
res = np.zeros(x.shape + (width,) )
for i in range(width):
x, r = divmod(x, 2)
res[..., -i] = r
if roll:
res = np.roll(res, width-1, axis=-1)
return res
Josef
_______________________________________________
NumPy-Discussion mailing list
[email protected]
http://mail.scipy.org/mailman/listinfo/numpy-discussion