Skip to content Skip to sidebar Skip to footer

Can't Iterate Over 2d Array To Normalize Data

I'm trying to normalize my data and i need to iterate over the training and testing set. I tried in different ways but i get this error list indices must be integers or slices, not

Solution 1:

You are using lists as indices. You may want to use enumerate. This will fix your error:

defminMaxNrom(training_data, testing_data):
    for indi, i inenumerate(training_data):
        for indj, j inenumerate(training_data):
            new_data = training_data[indi][indj] - min(j) / max(j) - min(j)

    for indi, i inenumerate(testing_data):
        for indj, j inenumerate(testing_data):
            new_testing_data = testing_data[indi][indj] - min(j) / max(j) - min(j)

    return (new_data, new_testing_data)

Some guess work as to what you are trying to achieve

Without more information it is difficult to know why your code is failing after fixing the can't use list as index problem, but here is my guess:

defminMaxNrom(training_data, testing_data):
    new_data = []
    new_testing_data = []
    for indi, i inenumerate(training_data):
        for indj, j inenumerate(training_data):
            new_data.append((training_data[indi][indj] - min(j)) / (max(j) - min(j)))

    for indi, i inenumerate(testing_data):
        for indj, j inenumerate(testing_data):
            new_testing_data.append((testing_data[indi][indj] - min(j)) / (max(j) - min(j)))

    return (new_data, new_testing_data)

Explanation

Say you have:

training_data = [[1, 2], [3, 4, 5], [4, 4, 4]]for i in training_data:
    print(i)

This will print:

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

As you can see, the i here is each sublist. But to access these sublists with reference, you do:

print(training_data[0])  # gives first sublistprint('---')
print(training_data[1])  # gives second sublistprint('---')
print(training_data[2])  # gives third sublist

This will give:

[1, 2]
---
[3, 4, 5]
---
[4, 4, 4]

Note that to access these sublists we use a number as the index not a list (which is what you were using). So in order to access each list and get its index, we use enumerate (a better variable name for i would be sublist):

for indi, i in enumerate(training_data):
    print('indi: ', indi)
    print('i: ', i)
    print('training_data[indi]: ', training_data[indi])
    print('---')

this gives:

indi:0i:  [1, 2]
training_data[indi]:  [1, 2]
---indi:1i:  [3, 4, 5]
training_data[indi]:  [3, 4, 5]
---indi:2i:  [4, 4, 4]
training_data[indi]:  [4, 4, 4]

Post a Comment for "Can't Iterate Over 2d Array To Normalize Data"