I have a list of integers, e.g.
i=[1,7,3,1,5] which I first transform to a list of the respective binary representations of length
Now I want to compute at how many of the
L positions in the binary representation there is a
1 as well as a zero
0. In my example the result would be
return=2 since there is always a
1 in the third (last) position for these entries. I want to compute this inside a function with a numba decorator.
Currently my code is:
@nb.njit def count_mixed_bits_v2(lst): andnumber = lst & lst ornumber = lst | lst for i in range(1, len(lst)-1): andnumber = andnumber & lst[i+1] ornumber = ornumber | lst[i+1] xornumber = andnumber ^ ornumber result = 0 while xornumber > 0: result += xornumber & 1 xornumber = xornumber >> 1 return result
First I take the AND of all numbers, ans also the OR of all numbers, then the XOR of those two results will have a 1 where the condition is fulfilled. In the end I count the number of 1's in the binary representation. My code seems a bit lengthy and I'm wondering if it could be more efficient as well. Thanks for any comment!
Edit: Without the numba decorator the following function works:
def count_mixed_bits(lst): xor = reduce(and_, lst) ^ reduce(or_, lst) return bin(xor).count("1")
(Credit to trincot)