计数器循环的奇怪 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,那个浮点转换会自动完成,所以你不需要明确地做它