Python 创建等间距阵列

Python 创建等间距阵列,python,numpy,Python,Numpy,我想创建一个0.1到100之间等距(0.1)的数字数组 step=0.1 range_a=numpy.arange(step,100+step,step) 为什么我的第一个元素是 range_a[0] Out[27]: 0.10000000000000001 而不是0.1 如何得到等于 [0.1,0.2,0.3,…,100]如评论中所述,这是由于浮点数的处理方式。一般来说,浮点数用于不精确但快速的计算,而在精度很重要的情况下使用double。您的代码可以按如下方式重写,以获得您想要的内容 s

我想创建一个0.1到100之间等距(0.1)的数字数组

step=0.1
range_a=numpy.arange(step,100+step,step)
为什么我的第一个元素是

range_a[0]
Out[27]: 0.10000000000000001
而不是0.1

如何得到等于
[0.1,0.2,0.3,…,100]

如评论中所述,这是由于浮点数的处理方式。一般来说,浮点数用于不精确但快速的计算,而在精度很重要的情况下使用double。您的代码可以按如下方式重写,以获得您想要的内容

step = 0.1
range_a = numpy.arange(step, 100+step, step).astype(numpy.double)

这基本上与浮点表示有关。最好使用
decimal
模块(但效率低下):
从decimal导入decimal;[Decimal('0.1')*范围(1,int(100/0.1)+1)内i的十进制数(int(i))
。但是通常没有理由不能使用
float
。@Jaco Nope。numpy和python都使用C双精度(几乎总是64位)作为默认浮点值。@jpp为什么重新打开?“我又想关门了。”让·弗朗索瓦·法布,请关门(我不打算回答)。Just OP似乎需要另一个解决方案。但我不确定他是否想要十进制。。所以他想要什么(以及为什么)还不清楚result@gabboshow无论使用何种精度,都会得到相同的结果,因为1/10不能用二进制精确表示。它有一个循环表示法,就像1/3不能用十进制精确表示一样。@Gabbos您使用的Python版本是什么?这在Python3.6.5和Python2.7中可以正常工作。是否使用.astype正确指定了输出的类型?@TalhaA。这只是python表示。假设这是一个64位系统,默认的numpy浮点值是
np.float64是np.double
。您的答案(特定于实现)没有更好。另一个选项是
np.longlong
,它可能是128位,但通常不是。无论如何,您还没有解决浮点值的基本问题。@TalhaA。是3.6.3