Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用条件填充矩阵_Python_Matlab_For Loop_If Statement - Fatal编程技术网

Python 用条件填充矩阵

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)

我正在将这个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) 
            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。