2017-01-05 2 views
0

Я пытаюсь реализовать kfold проверки в питоне для подготовки CIFAR-10 установлен так, для этого я пытаюсь замаскировать обучающий набор с помощью булевого листаМаскировка 2d массивов с помощью булева массива

X_Train_folds является массивом форма 5X1000X3072

selection = [True, True, True, True, True] 
for k in k_choices: 
    for i in xrange(0,num_folds): 
     selection[i] = False 

     classifier = KNearestNeighbor() 
     classifier.train(X_train_folds[selection,:].reshape(1,X_train_folds.shape[0]*X_train_folds.shape[1])), 
         Y_train_folds[selection,:].reshape(1,Y_train_folds.shape[0]*Y_train_folds.shape[1])) 
     dists = classifier.compute_distances_no_loops(X_train_folds[i]) 
     y_pred = classifier.predict_labels(dists, k) 
     num_correct = np.sum(y_pred == Y_train_folds[i]) 
     accuracy = float(num_correct)/(y_train.shape[0]/num_folds) 
     k_to_accuracies[k] = accuracy 




    TypeError: list indices must be integers, not tuple 

EDIT 1: проблема может быть понята как я пытаюсь получить как 4 строк, за исключением одного г-я в петле, как если массив [1,2,3,4,5] первый я хочу список [2,3,4,5], затем [1,3,4,5] и т. д.

+0

Проблема заключается в Python не имеет истинную структуру 2D массива - можно подделать с помощью словаря вместо списка, или вы могли бы использовать что-то вроде NumPy, который имеет 2D массивов, которые используют этот синтаксис. – jackarms

+0

Я не понял ваше второе решение, которое вы могли бы разработать? а также вы говорите о создании X_Train_folds в качестве словаря? Я думаю, что словарь - это действительно хорошее предложение, я обязательно его попробую, но мне хотелось бы, если бы вы могли подробно рассказать о втором, как кажется более нормальным. –

+0

Возможно, вы могли бы объяснить проблему, которую пытаетесь решить? Кажется, вы хотите получить 1 строку, затем 2 строки и т. Д., Используя логический массив, но я действительно не уверен. – jackarms

ответ

0

Если вы хотите просто добиться успеха ssively упасть каждый i_th элемент в списке?

mask_this = [1,2,3,4,5] 

[mask_this[:i]+mask_this[(i+1):] for i in range(len(mask_this))] 

Out[17]: [[2, 3, 4, 5], [1, 3, 4, 5], [1, 2, 4, 5], [1, 2, 3, 5], [1, 2, 3, 4]] 
Смежные вопросы