gpt4 book ai didi

python - 在python中打印numpy数组

转载 作者:行者123 更新时间:2023-11-30 22:40:39 30 4
gpt4 key购买 nike

这是一个简单的Python代码。

end = np.zeros((11,2))
alpha=0
while(alpha<=1):
end[int(10*alpha)] = alpha
print(end[int(10*alpha)])
alpha+=0.1
print('')
print(end)

和输出:

[ 0.  0.]
[ 0.1 0.1]
[ 0.2 0.2]
[ 0.3 0.3]
[ 0.4 0.4]
[ 0.5 0.5]
[ 0.6 0.6]
[ 0.7 0.7]
[ 0.8 0.8]
[ 0.9 0.9]
[ 1. 1.]

[[ 0. 0. ]
[ 0.1 0.1]
[ 0.2 0.2]
[ 0.3 0.3]
[ 0.4 0.4]
[ 0.5 0.5]
[ 0.6 0.6]
[ 0.8 0.8]
[ 0. 0. ]
[ 1. 1. ]
[ 0. 0. ]]

​很容易注意到 0.7 丢失了,0.8 之后变为 0 而不是 0.9 等等......为什么这些输出不同?

最佳答案

这是因为浮点错误。运行这个:

import numpy as np

end = np.zeros((11, 2))
alpha=0
while(alpha<=1):
print("alpha is ", alpha)
end[int(10*alpha)] = alpha
print(end[int(10*alpha)])
alpha+=0.1
print('')
print(end)

你会看到 alpha 依次是:

alpha is  0
alpha is 0.1
alpha is 0.2
alpha is 0.30000000000000004
alpha is 0.4
alpha is 0.5
alpha is 0.6
alpha is 0.7
alpha is 0.7999999999999999
alpha is 0.8999999999999999
alpha is 0.9999999999999999

基本上,像 0.1 这样的 float 不精确存储在您的计算机上。如果将 0.1 加在一起(比如 8 次),则不一定会得到 0.8——小误差会累积并给出不同的数字,在本例中为 0.7999999999999999。然而,Numpy 数组必须采用整数作为索引,因此它使用 int 函数强制其向下舍入到最接近的整数 - 7 - 这会导致该行被覆盖。

要解决此问题,您必须重写代码,以便仅使用整数来索引数组。一种稍微粗略的方法是使用 round 函数将 float 舍入为最接近的整数。但实际上,您应该重写代码,以便它迭代整数并将它们转换为 float ,而不是迭代 float 并将它们转换为整数。

您可以在此处阅读有关 float 的更多信息:

https://docs.python.org/3/tutorial/floatingpoint.html

关于python - 在python中打印numpy数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42857766/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com