列出2个负十进制数之间的所有数字

时间:2017-09-14 14:57:27

标签: python numpy range

如何获取2个负十进制数之间的所有数字列表。

请注意,比例可能是2或5位小数,精度不超过3.(我不知道是否有此事)

对于给定的1个负十进制和其他负十进制:

步骤[-0.05 and -0.02 ]

0.01

输出:

[-0.04,-0.03]

或者例如1个负十进制和1个正十进制:

步骤[-0.05 and 0.05 ]

0.01

输出:

[-0.04,-0.03,-0.02,-0.01,0.00,0.01,0.02,0.03,0.04,0.05]

尝试range()和xrange()采取消极步骤,什么也没得到。

numpy.arange我得到了奇怪的结果。

2 个答案:

答案 0 :(得分:2)

这应该有用。

min_value = -0.05
max_value = 0.05
step = 0.01
output_list = [elem/100000.0 for elem in range(int(min_value*100000), int((max_value+step)*100000), int(step*100000))]
# outputs [-0.05, -0.04, -0.03, -0.02, -0.01, 0.0, 0.01, 0.02, 0.03, 0.04, 0.05]

说明:

range适用于整数,你说你想要的最大精度是3.所以,通过乘以1000(3位小数)和转换为integer你可以使用该函数。剩下的就是再次将结果除以1000,以获得所需的比例。

此外,由于范围函数不包含max_value,因此我添加了包含它的步骤,因此使用(max_value+step)*1000。您可以使用min_value执行相同操作以排除它。

答案 1 :(得分:1)

numpy.arange效果良好float计算总是有微小错误。

import numpy as np

begin  = -0.05
finish = 0.05
step   = 0.01

np.set_printoptions(precision=3)
print(np.arange(begin+step, finish, step))

输出结果为:

[ -4.000e-02  -3.000e-02  -2.000e-02  -1.000e-02   6.939e-18   1.000e-02
   2.000e-02   3.000e-02   4.000e-02]

其中-4.000e-02表示(-4)*10^(-2)0.046.939e-18表示6.939*10^(-18)或几乎为零。

还有另一种方式:

begin = -0.05
finish = -0.02
step = 0.01
l = [begin+(i+1)*step for i in range(round((finish-begin)/step)-1)]
print(l)

输出结果为:

[-0.04, -0.030000000000000002]