2017-06-16 330 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

对于您在问题中发布的代码,我已经给出了一个解决方案,其中所有步骤都发生在内部循环中,包括您最初在外部循环中执行的关键步骤。如果您以某种方式修改您的问题代码,我会编辑我的答案以解决您的新代码。但答案仍然涉及“在离开内部循环之前,在内部循环中做所有需要做的事情” –