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;
你能帮我弄清楚发生了什么吗?
答案 0 :(得分:2)
您正在执行整数除法。整数除法意味着它将舍入除法的结果,如
>>> print(99 / 100)
0
您可以通过将一个(或两个)操作数转换为浮点数来执行“正常”除法。
float(counter) / float(N)
在这种情况下,您看到的其他效果(VisibleDeprecationWarning)会导致N
为float
。函数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 ,那么浮动播放将自动完成,因此您不需要明确地执行此操作