我的循环中可能有错误的缩进,但具体在哪里?
Probably wrong indentations in my loop, but where exactly?
我需要计算X的10000行中有多少行满足这个条件的概率:if abs(X[j,i])>10
。一旦它连续发生,对我来说它在该行发生了多少次并不重要,只有它发生了,所以我使用了变量 d
.
我可能有缩进问题,因为这是我的输出:
prob. for sigma= 0.1 is 1.0
prob. for sigma= 0.225 is 1.0
prob. for sigma= 0.35 is 1.0
prob. for sigma= 0.475 is 1.0
prob. for sigma= 0.6 is 1.0
我的代码:
import numpy as np
import numpy.random as npr
j=0
T=10
M=10000
N=200
h=T/N
sigma=np.linspace(0.1,0.6,num=5)
X=np.ones(shape=(5*M,N))
X[:,0]=0.5 # X0=5
Z=npr.randn(5*M,N) # normal random numbers
for S in range(1,6):
s=sigma[S-1]
while j<=S*M-1:
for i in range(0,N-1): # Euler
X[j,i+1]=X[j,i]+X[j,i]*(1-X[j,i])*h+s*Z[j,i]*np.sqrt(h)
j+=1
D=[]
d=[]
for S in range(1,6): **# here starts the problem**
s=sigma[S-1]
for j in range((S-1)*M,M*S):
for i in range(0,N):
if abs(X[j,i])>10:
D.append(X[j,i])
d+=[len(D)]
D=[]
P=(len(d))/M
print("prob. for sigma=",s, "is", P)
d=[]
您的问题是您总是将 len(D) 附加到 d,因此 len(d) 始终等于 M。
更改此部分:
D=[]
d=[]
for S in range(1,6): **# here starts the problem**
s=sigma[S-1]
for j in range((S-1)*M,M*S):
for i in range(0,N):
if abs(X[j,i])>10:
D.append(X[j,i])
d+=[len(D)]
D=[]
P=(len(d))/M
print("prob. for sigma=",s, "is", P)
d=[]
给这个:
D=[]
d=[]
for S in range(1,6): # here starts the problem
s=sigma[S-1]
for j in range((S-1)*M,M*S):
for i in range(0,N):
if abs(X[j,i])>10:
D.append(X[j,i])
if len(D) > 0:
d.append(len(D))
D=[]
P=len(d)/M
print("prob. for sigma=",s, "is", P)
d=[]
你会得到这个输出:
prob. for sigma= 0.1 is 0.0
prob. for sigma= 0.225 is 0.0089
prob. for sigma= 0.35 is 0.1174
prob. for sigma= 0.475 is 0.3111
prob. for sigma= 0.6 is 0.4879
我需要计算X的10000行中有多少行满足这个条件的概率:if abs(X[j,i])>10
。一旦它连续发生,对我来说它在该行发生了多少次并不重要,只有它发生了,所以我使用了变量 d
.
我可能有缩进问题,因为这是我的输出:
prob. for sigma= 0.1 is 1.0
prob. for sigma= 0.225 is 1.0
prob. for sigma= 0.35 is 1.0
prob. for sigma= 0.475 is 1.0
prob. for sigma= 0.6 is 1.0
我的代码:
import numpy as np
import numpy.random as npr
j=0
T=10
M=10000
N=200
h=T/N
sigma=np.linspace(0.1,0.6,num=5)
X=np.ones(shape=(5*M,N))
X[:,0]=0.5 # X0=5
Z=npr.randn(5*M,N) # normal random numbers
for S in range(1,6):
s=sigma[S-1]
while j<=S*M-1:
for i in range(0,N-1): # Euler
X[j,i+1]=X[j,i]+X[j,i]*(1-X[j,i])*h+s*Z[j,i]*np.sqrt(h)
j+=1
D=[]
d=[]
for S in range(1,6): **# here starts the problem**
s=sigma[S-1]
for j in range((S-1)*M,M*S):
for i in range(0,N):
if abs(X[j,i])>10:
D.append(X[j,i])
d+=[len(D)]
D=[]
P=(len(d))/M
print("prob. for sigma=",s, "is", P)
d=[]
您的问题是您总是将 len(D) 附加到 d,因此 len(d) 始终等于 M。
更改此部分:
D=[]
d=[]
for S in range(1,6): **# here starts the problem**
s=sigma[S-1]
for j in range((S-1)*M,M*S):
for i in range(0,N):
if abs(X[j,i])>10:
D.append(X[j,i])
d+=[len(D)]
D=[]
P=(len(d))/M
print("prob. for sigma=",s, "is", P)
d=[]
给这个:
D=[]
d=[]
for S in range(1,6): # here starts the problem
s=sigma[S-1]
for j in range((S-1)*M,M*S):
for i in range(0,N):
if abs(X[j,i])>10:
D.append(X[j,i])
if len(D) > 0:
d.append(len(D))
D=[]
P=len(d)/M
print("prob. for sigma=",s, "is", P)
d=[]
你会得到这个输出:
prob. for sigma= 0.1 is 0.0
prob. for sigma= 0.225 is 0.0089
prob. for sigma= 0.35 is 0.1174
prob. for sigma= 0.475 is 0.3111
prob. for sigma= 0.6 is 0.4879