Python `cbor` encode np.float32 as float

41 views Asked by At

Trying to encode in cbor some lists and dicts which may have deeply nested numpy float32 values.

Although those values looks similar and interchangeable:

import numpy as np
x = np.float32(1.001)
y = 2.002
print(x, y) # 1.001 2.001
print(type(x), type(y)) # <class 'numpy.float32'> <class 'float'>

cbor would fail to encode np.float32:

import cbor
cbor.dumps([x, y])
# ValueError: cannot serialize unknown object: 1.001

I don't want or need to retain the np.float32 type information, so I would be ok if cbor treats a np.float32 (and similar) object just like a basic float object.

But I don't want to deeply scan and convert my object (which in this simplified case is [x, y], but it is more complex in reality) as that would be a performance penalty.

Is there a way to register an encoder for np.float32 so that I can convert the value to Python's float and encode it with default cbor ancoder?

0

There are 0 answers