Hi team,
I have defined a method which takes a decimal value and creates a representation of it know as temporal coding.
def getDecimalToUnary(input, bitwidth, encode="TC"):
"""This method accepts an input in decimal format and generates an unary temporal encoded representation of the input.
The length of the unary bit stream depends on the bitwidth
Args:
input (int): The input decimal that needs to be transistion encoded
bitwidth (int): The bit stream length is 2**bitwidth
encode (str, optional): _description_. Defaults to 'TC'. TC represents temporal encoding
"""
if encode == "TC":
unary_code = torch.cat(
(torch.zeros(2**bitwidth - input), torch.ones(input)), 0
)
return unary_code
else:
print("Other encoding schemes are not implemented")
Rules of generating temporal code of a decimal are:
- The generated temporal code length should be equal to 2**bitwidth
- The total number of 1’s in the bitstream should be equal to decimal value.
- All the 1’s should be together at the end of the bitstream
For example:
If input is 5 and bitwidth is 3. Then, the unary bitstream is of length 2**3 = 8bits.
The temporal representation of 5 is 00011111.
The above code is able to work on single decimal value, however I want to have this method work for any dimension tensor.
For instance, for tensor([1,2],[2,5]) with bitwidth 3, the output of the method should be
tensor([[[0,0,0,0,0,0,0,1],[0,0,0,0,0,0,1,1]],[[0,0,0,0,0,0,1,1],[0,0,0,1,1,1,1,1]]])