用于计数器循环的奇怪Python输出

时间:2016-08-31 19:20:26

标签: python loops numpy random counter

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

代码每次输出ZERO。

我将100000更改为100000.0并且它给了我68%但是通知我以下内容:

  

森蚺/ LIB / python2.7 /站点包/ ipykernel / 主要的.py:5:   VisibleDeprecationWarning:使用非整数而不是   整数将导致将来出现错误&#34;

你能帮我弄清楚发生了什么吗?

2 个答案:

答案 0 :(得分:2)

您正在执行整数除法。整数除法意味着它将舍入除法的结果,如

>>> print(99 / 100)
0

您可以通过将一个(或两个)操作数转换为浮点数来执行“正常”除法。

float(counter) / float(N)

在这种情况下,您看到的其他效果(VisibleDeprecationWarning)会导致Nfloat。函数randn采用整数作为参数,而不是浮点数。见numpy.random.randn。 numpy的旧版本允许使用float,但现在它已被弃用。这意味着它仍然有效,但不再是好的做法。

答案 1 :(得分:1)

首先,我建议您正确缩进代码,以便用户可以直接运行它来诊断您的错误。无论如何,给你的片段格式正确:

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 ,那么浮动播放将自动完成,因此您不需要明确地执行此操作