#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-массив, и ваша индексация работает должным образом