2014-01-13 48 views
-1

我有這樣的代碼:雖然真正的算法迭代的Python

split_at = q[:,3].searchsorted([1,random.randrange(LB,UB-I)]) 
D = numpy.split(q, split_at) 
T=D[1] 
TF=D[2] 
T2=copy(TF) 
T2[:,3]=T2[:,3]+I 
u=random.sample(T[:],1) 
v=random.sample(T2[:],1) 
u=array(u) 
v=array(v) 
d=v[0,0]-u[0,0]+T[-1,3] 

我想這if d < = 1000:

x=numpy.where(v==T2)[0][0] 
y=numpy.where(u==T)[0][0] 
l=np.copy(T[y]) 
T[y],T2[x]=T2[x],T[y] 
T2[x],l=l,T2[x] 
E=np.copy(T) 
E2=np.copy(T2) 
E[:,3]=np.cumsum(E[:,0]) 
E2[:,3]=np.cumsum(E2[:,0])+I 
f2=sum(E[:,1]*E[:,3])+sum(E2[:,1]*E2[:,3]) 

,比if d>1000我想OT重新計算代碼的第一部分,一遍又一遍地驗證if d<=1000,直到滿足條件。

回答

0

什麼用起:

d = 1000000 
while d > 1000: 
    split_at = q[:,3].searchsorted([1,random.randrange(LB,UB-I)]) 
    D = numpy.split(q, split_at) 
    T=D[1] 
    TF=D[2] 
    T2=copy(TF) 
    T2[:,3]=T2[:,3]+I 
    u=random.sample(T[:],1) 
    v=random.sample(T2[:],1) 
    u=array(u) 
    v=array(v) 
    d=v[0,0]-u[0,0]+T[-1,3] 
x=numpy.where(v==T2)[0][0] 
y=numpy.where(u==T)[0][0] 
l=np.copy(T[y]) 
T[y],T2[x]=T2[x],T[y] 
T2[x],l=l,T2[x] 
E=np.copy(T) 
E2=np.copy(T2) 
E[:,3]=np.cumsum(E[:,0]) 
E2[:,3]=np.cumsum(E2[:,0])+I 
f2=sum(E[:,1]*E[:,3])+sum(E2[:,1]*E2[:,3]) 
+0

我不知道如果我可以,因爲d必須是我在其他段落中使用的固定值@sharcashmo – Charlienoob

+0

@Charlienoob但你'在代碼中設置d值 – sharcashmo

+0

我不明白爲什麼d = 1000000,然後d = v [0,0] -u [0,0] + T [-1,3] – Charlienoob

0

爲什麼不安排代碼到類似的功能:

def func1(): # add your arguments to param list 
    split_at = q[:,3].searchsorted([1,random.randrange(LB,UB-I)]) 
    # some code 
    d=v[0,0]-u[0,0]+T[-1,3] 
    return d,T,T2 

def func2(T,T2): 
    x=numpy.where(v==T2)[0][0] 
    # more code  

,只是這樣做:

d = 10000 
while d > 1000: 
    d,T,T2 = func1() 
else: 
    func2(T,T2) 
+0

我認爲這可以工作,但除此之外,我迭代不滿足條件d <= 1000? – Charlienoob

+0

我有這樣的錯誤:IndexError回溯(最近最後一次調用) () 66通 67否則: ---> 68 FUNC2() in func2() 52 return d 53 def func2(): ---> 54 x = numpy.where(v == T2)[0] [0] 55 y = numpy.where (u == T)[0] [0] 56 l = np.copy(T [y]) IndexError:索引0超出軸0的大小爲0的邊界@greole – Charlienoob