2016-12-01 30 views
0

我試圖在python中進行交叉驗證。我的數據庫大小爲31x9。我想將矩陣拆分爲大小爲28和3的矩陣以進行評估。而且在測試矩陣中,我想將最後兩列替換爲零。我的代碼如下:正確的交叉驗證和python中的矩陣處理

def printme(training): 
    train_list = [] 
    test_list = [] 
    num_folds = 10 
    subset_size = len(training)/num_folds 
    for i in range(num_folds): 
      testing_this_round = training[i*subset_size:][:subset_size] 
      training_this_round = training[:i*subset_size] + training[(i+1)*subset_size:] 
      train_list.append(training_this_round) 
      new_test = testing_this_round 

      new_test[0][8] = 0 
      new_test[1][8] = 0 
      new_test[2][8] = 0 

      new_test[0][7] = 0 
      new_test[1][7] = 0 
      new_test[2][7] = 0 

      test_list.append(new_test) 

    return train_list, test_list 

的交叉驗證似乎正常工作,但是當我試圖讓測試矩陣等於零的最後兩個columsn,我entounted問題。看來我的代碼也影響訓練矩陣。我怎樣才能克服這個問題?在返回的矩陣train_list和test_list中,最後兩列都被更改爲零。

回答

1

您可以做的是導入copy並使用其功能deepcopy函數。然後,你就只需要通過

testing_this_round = copy.deepcopy(training[i*subset_size:][:subset_size]) 

其實你的代碼沒有影響「也」的集訓名單,以取代

testing_this_round = training[i*subset_size:][:subset_size] 

,因爲它是相同的矩陣,但是有兩個不同的名字。有關更多詳細信息,請參閱python variables are pointers?