运行此代码时出现零错误,有人能看出原因吗? 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
答案 0 :(得分:2)
当您使用第二个参数0调用montecarlo
时,它会将其传递给randaxis
,dict
使用它来制作一个空的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 }));
});
,就会发生这种情况。