2016-08-31 48 views
2

該程序使用循環隨機生成幾個人工神經網絡的權重,計算網絡的輸出並將其附加到每個數組的末尾,然後將成本附加到每個陣列的末尾。在不對數組進行排序的情況下運行時,該程序會正確執行所有計算,但是當我嘗試按每個數組中的最後一項對數組進行排序時,即使排序函數是在所有其他函數之後調用的,它似乎也會打斷循環。Python:對循環中產生的二維數組進行排序,導致錯誤

w, h = 9, 10 
network = [[0 for x in range(w)] for y in range(h)] 

def sigmoid(sigin): 
    return 1/(1 + math.exp(-sigin)) 
def netcal(x): 
    network[x].append(sigmoid((sigmoid(i1*network[x][0]+i2*network[x][1])*network[x][6])+(sigmoid(i1*network[x][2]+i2*network[x][3])*network[x][7])+(sigmoid(i1*network[x][4]+i2*network[x][5])*network[x][8]))) 
def seed(): 
    b = 0 
    while b < 10: 
     y = 0 
     while y < 9: 
      network[b][y] = random.random() 
      y += 1 
     b += 1 
def calall(): 
    c = 0 
    while c < 9: 
     netcal(c) 
     print(network[c][9]) 
     c += 1 
def cost(): 
    d = 0 
    while d < 9: 
     network[d].append(1 - network[d][9]) 
     print(network[d][10]) 
     d += 1 
def sort(): 
    sorted(network, key=lambda x: x[10]) 
def wait(): 
    m.getch() 


i1=0 
i2=1 

seed() 
calall() 
print("break") 
cost() 
sort() 
print(network) 

回答

0

您目前的方法對列表進行排序,但沒有結果return,也沒有更新網絡。請注意,sorted返回排序列表。

你想要一個就地排序:

def sort(): 
    network.sort(key=lambda x: x[-1]) # or x[8] 
#        ^^ 
+0

我仍然得到同樣的錯誤與 –

+0

'network.sorted(鍵=拉姆達X:X [8])' –

+0

@RyanHarper您的lambda中使用的索引「10」不存在。最後可以索引,如我的更新 –

相關問題