【问题标题】:Create range from 0 to 1 with step 0.05 in Numpy在 Numpy 中使用步骤 0.05 创建从 0 到 1 的范围
【发布时间】:2020-02-12 07:14:34
【问题描述】:

我想创建一个从01 的列表,步骤为0.05,结果如下:[0, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 1]

我尝试使用以下代码,但输出似乎不正确。任何人都可以帮忙吗?谢谢。

print(np.arange(0, 1, 0.05).tolist())

输出:

[0.0, 0.05, 0.1, 0.15000000000000002, 0.2, 0.25, 0.30000000000000004, 0.35000000000000003, 0.4, 0.45, 0.5, 0.55, 0.6000000000000001, 0.65, 0.7000000000000001, 0.75, 0.8, 0.8500000000000001, 0.9, 0.9500000000000001]

【问题讨论】:

    标签: numpy python-3.6


    【解决方案1】:

    你想要np.linspace()

    np.linspace(0, 1, 21)
    Out[]: 
    array([0.  , 0.05, 0.1 , 0.15, 0.2 , 0.25, 0.3 , 0.35, 0.4 , 0.45, 0.5 ,
           0.55, 0.6 , 0.65, 0.7 , 0.75, 0.8 , 0.85, 0.9 , 0.95, 1.  ])
    

    【讨论】:

    • 你好丹尼尔。 np.linspace(0, 1, 21)[3] 仍然得到我 0.15000000000000002。它在输出整个数组时显示为0.15,就像在您的示例中一样,但这不只是它在输出中如何汇总的产物吗?我看不出linspace 应该如何做任何处理浮点精度问题的魔法。我相信你仍然需要做类似np.around(np.linspace(0, 1, 21)[3], 3) 的事情来处理这个问题。我错过了什么?
    • 检查历史,似乎我在“隐形编辑”时间窗口内回答了这个问题。我无法想象我对现在提出的问题给出了这个答案。对于处理浮点错误,您的解决方案(或下面的自我回答)可能是最好的。
    • 有道理,谢谢你的澄清!
    【解决方案2】:

    没有必要使用 .tolist()。

    试试这个:

    a = np.arange(0, 1, 0.05)
    print (a)
    

    输出:

    [0.   0.05 0.1  0.15 0.2  0.25 0.3  0.35 0.4  0.45 0.5  0.55 0.6  0.65
     0.7  0.75 0.8  0.85 0.9  0.95]
    

    【讨论】:

    • 好的,但我还是需要转换成列表。
    • a = list(np.arange(0, 1, 0.05)) 打印 (type(a))
    • 将结果转化为list,可以用type检查。
    • 这很奇怪,如果知道你可以四舍五入的小数位数
    【解决方案3】:

    这行得通:

    print(np.arange(0, 1, 0.05).round(2).tolist())
    

    输出:

    [0.0, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95]
    

    【讨论】:

      猜你喜欢
      • 2017-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多