Python float vs numpy.float32

时间:2017-05-14 19:39:35

标签: python python-2.7 numpy

使用net = load('net-epoch-100.mat'); trainOpts.learningRate = [0.004*ones(1,25), 0.002*ones(1,25), 0.001*ones(1,25), 0.0005*ones(1,25)]; %I set much higher training rate %for pretraining on datasets B and C net.layers=net.layers(1:end-13); %only taking first three layers from pretrained net ... the rest of the layers

numpy.float32

使用常规Python t = numpy.float32(.3) x = numpy.float32(1) r = numpy.float32(-.3) _t = t+x+r _t == 1 # -> False

float

为什么?

2 个答案:

答案 0 :(得分:2)

Python float是一个C double类型:documentation

  

浮点数通常使用C中的 double 来实现; sys.float_info中提供了有关运行程序的机器的浮点数的精度和内部表示的信息。

因此,您要比较32和64个精度浮点数。以下内容适用:

t = numpy.float64(.3)
x = numpy.float64(1)
r = numpy.float64(-.3)
_t = t+x+r
_t == 1

答案 1 :(得分:1)

浮点值在计算机上本质上是不精确的。根据{{​​3}},python默认float是大多数机器上的双精度浮点数。 numpy.float32是一个精度浮点数。它的双精度对应物是numpy.float64。这可以解释这种情况的不同之处。

通常,不应使用==直接比较浮点数。您可以使用numpy.isclose来处理由非精确浮点表示引起的小错误。