【发布时间】:2023-02-13 22:38:19
【问题描述】:
当我尝试查找使用 len(arange()) 制作的列表的长度时,其中一个显示错误答案(超出 1)。背后的原因是什么?还是我算错了?请看图(https://i.stack.imgur.com/fg6S8.jpg)
预期长度为 500,但它显示的长度为 501
【问题讨论】:
-
这就是为什么将
arange与浮点数一起使用是个坏主意。使用linspace。
当我尝试查找使用 len(arange()) 制作的列表的长度时,其中一个显示错误答案(超出 1)。背后的原因是什么?还是我算错了?请看图(https://i.stack.imgur.com/fg6S8.jpg)
预期长度为 500,但它显示的长度为 501
【问题讨论】:
arange 与浮点数一起使用是个坏主意。使用linspace。
这是因为 numpy 的局限性,以及使用非常小的数字进行计算会在结果中产生小的舍入误差这一事实。
输出的长度在数值上可能不稳定。另一个稳定性问题是由于 numpy.arange 的内部实现。用于填充数组的实际步长值是 dtype(start + step) - dtype(start) 而不是 step。由于转换或由于在开始比步长大得多时使用浮点数,可能会在此处发生精度损失。这可能会导致意外行为。
为了证明这一点,如果您简单地将范围的值乘以 1000 得到
print(len(np.arange(0,1000/1000,1000/(500000))))然后你得到500的正确答案。
【讨论】: