Использование встроенного цикла for против вложенного цикла for - PullRequest
1 голос
/ 08 октября 2019

Я работаю над функцией, которая принимает набор тестовых данных, сравнивает различия каждой из 62 точек в тестовом наборе с каждой из 248 точек в тренировочном наборе, определяет, какая точка обучающих данных является ближайшей, и используетэтот индекс, чтобы вернуть массив прогнозируемого выхода.

Я заставляю функцию работать, как показано ниже, но я не мог заставить ее работать, используя вложенный цикл for. Кто-нибудь может объяснить мне, почему вложенный цикл работает по-другому? Я новичок в Python, и я некоторое время боролся с этим.

def distance(x,y):
    return np.sum(np.abs(x-y))

def NN_L1(trainx, trainy, testx):
    # inputs: trainx, trainy, testx <-- as defined above
    # output: an np.array of the predicted values for testy 

    ### BEGIN SOLUTION
    predictions_l1 = np.ones(62)
    for j in range(len(testx)):
        prediction = trainy[np.argmin([distance(testx[j],trainx[i]) for i in range(len(trainx))])]
        predictions_l1[j] = prediction
    return predictions_l1

Вложенный цикл for, который я пробовал, выглядит следующим образом:

test_1 = np.ones(62)
for j in range(len(testx)):
    for i in range(len(trainx)):
        tester = trainy[np.argmin([distance(testx[j], trainx[i])])]

Я всегда получаю массиводинаковых значений при завершении функции

...