2017-06-16 191 views
0

我有一個情況,我需要2循環(我和K)如下所示。我想在離開後繼續內循環。回到內循環外循環 - Python嵌套循環

import numpy as np 
X = [[12, 11, 1], [1,2,3]] 
mu = [1, 2, 3] 
sublist = [] 

for i in range(0, 4): 
    for k in range(0, 3): 
     subtr = X[i] - mu[k] 
     sublist.append(subtr) 
    # leaving the loop k to calc argmin 
    agmin = np.argmin(sublist) 
    C.append(agmin) 
     # Now I want to get back to the inner loop (k) to continue #further calculation, but obviously will result an error. 
     np.dot((C[i] == k),X[i])  

處理此類情況的最佳方法是什麼?

+0

上面的代碼是不完美的並且僅僅是一個例子:它應該是這樣的:X = np.array([[12,11,1],[ 1,2,3]]),對於範圍(0,2)中的k。但請注意,這只是爲了展示內部和外部的迴路計算 – user3806770

+0

爲什麼您需要首先離開內部迴路?看起來排序不會像現在這樣。或者至少把'.dot'操作放在循環中?或者甚至,再次啓動內部循環! – heltonbiker

+0

>爲什麼你需要首先離開內循環? >>>因爲我想做一些僅用於外部循環的計算,然後將其用於內部循環。 – user3806770

回答

2

在離開內部循環之前,完成內部循環中所需的所有操作。下面是您的代碼的一個略加修改:

import numpy as np 
X = [[12, 11, 1], [1,2,3]] 
mu = [1, 2, 3] 
sublist = [] 
C = #whatever C should be initialized to  

for i in range(0, 4): 
    for k in range(0, 3): 
     subtr = X[i] - mu[k] 
     sublist.append(subtr) 

     # calculate agmin (argmin) once per inner loop, at end 
     if k == 2: 
      agmin = np.argmin(sublist) 
      C.append(agmin) 

     # not sure what this line does, but do it inside the inner loop since it 
     # needs k. (I'm guessing you really want some_var = np.dot(...)) 
     np.dot((C[i] == k),X[i])    
+0

這就是問題所在。如果有一種情況是因爲它取決於在外部循環上完成的計算而不能在內部循環中完成所有的事情,那麼什麼是解決方案。 – user3806770

+0

對這個問題的正確答案是「以代碼或僞代碼的形式向我展示案例,因爲你幾乎肯定會以錯誤的方式接近你的問題。」 –

+0

對於您在問題中發佈的代碼,我已經給出了一個解決方案,其中所有步驟都發生在內部循環中,包括您最初在外部循環中執行的關鍵步驟。如果您以某種方式修改您的問題代碼,我會編輯我的答案以解決您的新代碼。但答案仍然涉及「在離開內部循環之前,在內部循環中做所有需要做的事情」 –