python 中的硬编码精确浮点值
hard code exact float values in python
这对我的问题来说可能有点矫枉过正,但我很好奇答案。
我有一个 np.float32
值矩阵,我想将其放入某些代码中。它是 50x3,所以我想直接把它放在源代码中——它不会经常改变。它对舍入有点敏感,所以我想尽可能精确编码数据。有没有一种在源代码中执行此操作同时还保留矩阵格式的好方法?
我正在考虑将 [[0xC45B36F3, ...],...] 以某种方式编码为 np.float32
.
为什么不使用 numpy.save
builtin? I've tried it with several float32 inputs and the numpy.load
没有舍入问题。
或者您有什么理由不能或不想那样做?
如果您选择对整数值进行编码,则可以执行以下操作:
int_data = np.array([[0xC45B36F3, ...],...], dtype=np.uint32)
floats = int_data.view(np.float32)
您可以将矩阵 m
转换为字节:
m.tobytes()
然后将字节粘贴到代码中:
data=b'\x34f\xd3.......paste the 4*50*3 bytes here ......\x12'
在你可以重建精确的矩阵之后:
m=matrix(frombuffer(data,float32).reshape(50,3))
没有任何损失。
这对我的问题来说可能有点矫枉过正,但我很好奇答案。
我有一个 np.float32
值矩阵,我想将其放入某些代码中。它是 50x3,所以我想直接把它放在源代码中——它不会经常改变。它对舍入有点敏感,所以我想尽可能精确编码数据。有没有一种在源代码中执行此操作同时还保留矩阵格式的好方法?
我正在考虑将 [[0xC45B36F3, ...],...] 以某种方式编码为 np.float32
.
为什么不使用 numpy.save
builtin? I've tried it with several float32 inputs and the numpy.load
没有舍入问题。
或者您有什么理由不能或不想那样做?
如果您选择对整数值进行编码,则可以执行以下操作:
int_data = np.array([[0xC45B36F3, ...],...], dtype=np.uint32)
floats = int_data.view(np.float32)
您可以将矩阵 m
转换为字节:
m.tobytes()
然后将字节粘贴到代码中:
data=b'\x34f\xd3.......paste the 4*50*3 bytes here ......\x12'
在你可以重建精确的矩阵之后:
m=matrix(frombuffer(data,float32).reshape(50,3))
没有任何损失。