Pytorch复制numpy浮点数的不精确值

Pytorch复制numpy浮点数的不精确值,numpy,pytorch,Numpy,Pytorch,我正在将一个浮点数(或numpy数组)转换为Pytorch张量,它似乎在将不精确的值复制到张量。错误出现在第8位有效数字之后。这对我的工作很重要(不是双关语),因为我处理混沌动力学,它对初始条件的微小变化非常敏感 我已经在使用手电筒。设置打印选项(精度=16)打印16位有效数字 np_x = state print(np_x) x = torch.tensor(np_x,requires_grad=True,dtype=torch.float32) print(x.data[0]) 输出为:

我正在将一个浮点数(或numpy数组)转换为Pytorch张量,它似乎在将不精确的值复制到张量。错误出现在第8位有效数字之后。这对我的工作很重要(不是双关语),因为我处理混沌动力学,它对初始条件的微小变化非常敏感

我已经在使用手电筒。设置打印选项(精度=16)打印16位有效数字

np_x = state
print(np_x)
x = torch.tensor(np_x,requires_grad=True,dtype=torch.float32)
print(x.data[0])
输出为:

0.7575408585008059
tensor(0.7575408816337585)

了解出了什么问题或如何解决会很有帮助。

因为您使用的是
float32
dtype。如果你把这两个数字转换成二进制,你会发现它们实际上是一样的。严格地说,float32格式中这两个数字的最精确表示是相同的

0.7575408585008059
最精确表示法=7.575408816337578544921875E-1
0.7575408816337585
最精确表示法=7.575408816337578544921875E-1
二进制代码:00111111 01000001 11101110 00110011

谢谢!只是想知道你是如何得到“最准确的表达”的?此外,如果它们基本上是相同的数字,为什么它们的打印方式不同呢?@AnshulChoudhary有很多在线转换工具,你可以看看。对于第二个问题,由于二进制编码不能代表所有可能的数字,因此其中一些数字只能在某些舍入误差下近似。