python выдает массив 1-мерный, но 2 были проиндексированы с ошибкой

#python #python-3.x #numpy #machine-learning

#python #python-3.x #numpy #машинное обучение

Вопрос:

Я закодировал mini_batch creator для miniBatchGradientDescent

Код здесь:

 # function to create a list containing mini-batches 
def create_mini_batches(X,y, batch_size): 
    print(X.shape, y.shape) # gives (280, 34) (280,)
    splitData=[]
    splitDataResults=[]
    batchCount=X.shape[0] // batch_size #using floor division for getting indexes integer form 
    for i in range(batchCount):
            splitData.append(X[(i) * batch_size : (i 1) * batch_size, :])
            splitDataResults.append(y[(i) * batch_size : (i 1) * batch_size, :]) # GIVES ERROR
    splitData=np.asarray(splitData)
    splitDataResults=np.asarray(splitDataResults)
    return splitData, splitDataResults, batchCount
  

ошибка гласит:

 splitDataResults.append(y[(i) * batch_size : (i 1) * batch_size, :])
IndexError: too many indices for array: array is 1-dimensional, but 2 were indexed
  

Я уверен, что форма правильная, но она выдает ошибку. Что не так?

Ответ №1:

попробуйте изменить форму y:

 print(X.shape, y.shape) # gives (280, 34) (280,)
y = y.reshape(-1, 1)
  

это должно решить вашу проблему, поскольку y станет 2-мерным

Комментарии:

1. Да, спасибо. Это решило мою проблему. Можете ли вы объяснить, почему это решается?

2. форма y была (280,) это 1-мерный массив, поэтому вы не можете использовать [i , j] для индексации, как вы делали в строке, которая вызвала исключение, вы пытались индексировать в два измерения 1-мерного массива. после выполнения изменения формы он становится (280, 1), так что это 2D-массив, и ваша индексация работает должным образом