Python 用条件填充矩阵
我正在将这个matlab代码转换成Python,但显然我犯了一个小错误,结果不一样。以下是matlab代码:Python 用条件填充矩阵,python,matlab,for-loop,if-statement,Python,Matlab,For Loop,If Statement,我正在将这个matlab代码转换成Python,但显然我犯了一个小错误,结果不一样。以下是matlab代码: alpha = 0.1; beta = 0.01; Dt = 0.001; N = 1000; time = 0:Dt:40; state = zeros(length(time),N); R = rand(length(time)-1,N); for j = 1:N for i = 2:length(time) if (state(i-1,j) == 0)
alpha = 0.1;
beta = 0.01;
Dt = 0.001;
N = 1000;
time = 0:Dt:40;
state = zeros(length(time),N);
R = rand(length(time)-1,N);
for j = 1:N
for i = 2:length(time)
if (state(i-1,j) == 0)
if (R(i-1,j) <= alpha*Dt)
state(i,j) = 1;
else
state(i,j) = 0;
end;
else
if (R(i-1,j) <= beta*Dt)
state(i,j) = 0;
else
state(i,j) = 1;
end;
end;
end;
end;
Open_stochastic = sum(state,2)/N;
open_deterministic = (1-exp(-time*(alpha+beta)))*alpha/(alpha+beta);
plot(time, Open_stochastic, ’k-’, time, Open_deterministic, ’k--’)
alpha=0.1;
β=0.01;
Dt=0.001;
N=1000;
时间=0:Dt:40;
状态=零(长度(时间),N);
R=兰德(长度(时间)-1,N);
对于j=1:N
对于i=2:长度(时间)
如果(状态(i-1,j)==0)
if(i-1,j)下一个问题是,在最内层的if/else
对之间缺少else:
。此外,您应该从两个for
语句中删除-1
。请记住,Python范围不包括endpint。范围(N)
已经从0运行到N-1。通过这些更改,我得到了一些接近您期望的东西。
更新
以下是正确的代码:
...
for j in range(N):
print(j,end='\r')
for i in range(1, len(time)):
if state[i-1][j] == 0:
if R[i-1][j] <= alpha*Dt:
state[i][j] = 1
else:
state[i][j] = 0
else: # <<< this is the line you were missing.
if R[i-1][j] <= beta*Dt:
state[i][j] = 0
else:
state[i][j] = 1
open_stochastic = state.sum(1)/N
plt.plot(time, open_stochastic)
plt.show()
。。。
对于范围(N)内的j:
打印(j,end='\r')
对于范围(1,len(时间))中的i:
如果状态[i-1][j]==0:
如果R[i-1][j]下一个问题是在最内层的if/else
对之间缺少一个else:
。此外,您应该从两个for
语句中删除-1
。请记住,Python范围不包括endpint。范围(N)
已经从0运行到N-1。通过这些更改,我得到了一些接近您期望的东西。
更新
以下是正确的代码:
...
for j in range(N):
print(j,end='\r')
for i in range(1, len(time)):
if state[i-1][j] == 0:
if R[i-1][j] <= alpha*Dt:
state[i][j] = 1
else:
state[i][j] = 0
else: # <<< this is the line you were missing.
if R[i-1][j] <= beta*Dt:
state[i][j] = 0
else:
state[i][j] = 1
open_stochastic = state.sum(1)/N
plt.plot(time, open_stochastic)
plt.show()
。。。
对于范围(N)内的j:
打印(j,end='\r')
对于范围(1,len(时间))中的i:
如果状态[i-1][j]==0:
如果R[i-1][j]语句状态[i][j]==1
没有任何作用。你的等号太多了。@TimRoberts谢谢你的评论,并为我的草率错误感到抱歉。我更正了我的原始代码,但结果仍然不一样,请查看图片你应该更正这些错误quotes@MadPhysicist你能指定“智能报价”吗?例如,'k-'
->'k-'
语句状态[i][j]==1
什么都不做。你的等号太多了。@TimRoberts谢谢你的评论,并为我的草率错误感到抱歉。我更正了我的原始代码,但结果仍然不一样,请查看图片。你应该更正这些错误quotes@MadPhysicist你能指定“智能报价”吗例如,'k-”
->'k-”
谢谢,你能不能帮我贴出正确的答案?我不确定我在哪里错过了elseWell,好吧,但我所做的只是一行一行地比较Matlab和Python。谢谢,你能帮我贴出正确的答案吗?我不确定我在哪里错过了elseWell,好吧,但我所做的只是一行一行的比较Matlab和Python的rison。