意外划分零错误

时间:2018-02-06 01:34:18

标签: python numpy math

运行此代码时出现零错误,有人能看出原因吗? montecarlo和Vd函数都工作得非常好,直到我把它们放在最后的for循环中,我不明白为什么,在任何地方都不应该有一个零来引起错误。

import numpy as np
import matplotlib.pyplot as plt
import random

d=2

def randaxis(d,N):
    axes={}
    for i in range(0,d):
        axes[i]=[]
        for j in range(0,N):
            axes[i].append(random.uniform(-1,1))
    return axes

def montecarlo(d,N):
    coords=randaxis(d,N)
    inshape=[]
    for i in range(len(list(coords.values())[0])):
        sumsqs=0
        for v in coords.values():
            sumsqs+=v[i]**2
        if sumsqs<=1:
            inshape.append(1)
        else:
            inshape.append(0)

    sumis=0
    for i in inshape:
        sumis+=i

    nratio = sumis/len(inshape)
    return nratio

def Vd(nratio):
    vd = nratio*(2**d)
    return vd

Rep=10 
k=0   
Repeats=np.zeros(Rep)
N=50
for N in range(1000):
    for k in range(Rep):
        Repeats[k]=Vd(montecarlo(2,N))
    print(Repeats)
    N+=50

1 个答案:

答案 0 :(得分:2)

当您使用第二个参数0调用montecarlo时,它会将其传递给randaxisdict使用它来制作一个空的list list作为值。

然后使用第一个这样的空montecarlo的长度来确定inshape中第一个循环的迭代次数,填充range(0),但当然,它是空的,你正在迭代inshape,它根本没有迭代,并且没有任何内容添加到nratio = sumis/len(inshape)

最终你来到这里:

list

其中你试图除以空0的长度,即0,一切都爆炸了。只要您将montecarlo作为第二个参数传递给Model.findById(1).then(data => { console.log(data.get({ plain: true })); }); ,就会发生这种情况。