计数器循环的奇怪 Python 输出
Strange Python output for counter loop
import numpy as np
from numpy.random import randn
N = 100000
counter = 0
for i in randn(N):
if i < 1 and i > -1:
counter = counter + 1
counter/N
代码每次都导致输出为零。
我将 100000 更改为 100000.0,它给了我 68%,但告诉我以下内容:
anaconda/lib/python2.7/site-packages/ipykernel/main.py:5:
VisibleDeprecationWarning: using a non-integer number instead of an
integer will result in an error in the future"
你能帮我弄清楚发生了什么吗?
您正在执行整数除法。整数除法意味着,它将除法结果向下舍入,如
>>> print(99 / 100)
0
您可以通过将一个(或两个)操作数转换为浮点数来执行 "normal" 除法。
float(counter) / float(N)
您看到的另一个效果(VisibleDeprecationWarning)是由于 N
在本例中是 float
。函数 randn
接受整数作为参数,而不是浮点数。参见 numpy.random.randn。旧版本的 numpy 允许使用浮点数,但现在已弃用。这意味着,它仍然有效,但不再是好的做法。
首先,我建议您适当缩进代码,以便用户可以 运行 直接诊断您的错误。无论如何,如果您的代码段格式正确:
import numpy as np
from numpy.random import randn
N = 100000
counter = 0
for i in randn(N):
if i < 1 and i > -1:
counter = counter + 1
print(counter, N, counter / N)
当您使用 python 2.x 执行 counter/N
时会出现问题,如果是这种情况,您需要强制转换为显式浮动 float(counter)/float(N)
。如果你只是使用 python 3.x,那个浮点转换会自动完成,所以你不需要明确地做它
import numpy as np
from numpy.random import randn
N = 100000
counter = 0
for i in randn(N):
if i < 1 and i > -1:
counter = counter + 1
counter/N
代码每次都导致输出为零。
我将 100000 更改为 100000.0,它给了我 68%,但告诉我以下内容:
anaconda/lib/python2.7/site-packages/ipykernel/main.py:5: VisibleDeprecationWarning: using a non-integer number instead of an integer will result in an error in the future"
你能帮我弄清楚发生了什么吗?
您正在执行整数除法。整数除法意味着,它将除法结果向下舍入,如
>>> print(99 / 100)
0
您可以通过将一个(或两个)操作数转换为浮点数来执行 "normal" 除法。
float(counter) / float(N)
您看到的另一个效果(VisibleDeprecationWarning)是由于 N
在本例中是 float
。函数 randn
接受整数作为参数,而不是浮点数。参见 numpy.random.randn。旧版本的 numpy 允许使用浮点数,但现在已弃用。这意味着,它仍然有效,但不再是好的做法。
首先,我建议您适当缩进代码,以便用户可以 运行 直接诊断您的错误。无论如何,如果您的代码段格式正确:
import numpy as np
from numpy.random import randn
N = 100000
counter = 0
for i in randn(N):
if i < 1 and i > -1:
counter = counter + 1
print(counter, N, counter / N)
当您使用 python 2.x 执行 counter/N
时会出现问题,如果是这种情况,您需要强制转换为显式浮动 float(counter)/float(N)
。如果你只是使用 python 3.x,那个浮点转换会自动完成,所以你不需要明确地做它