Numpy нарезки с размером партии
У меня есть массив NumPy A
формы (550,10)
, У меня размер пакета 100, т.е. сколько строк данных я хочу получить A
, В каждой итерации я хочу извлечь 100 строк из A. Но когда я достигну последних 50 строк, я хочу последние 50 и первые 50 строк из A.
У меня есть такая функция:
def train(index, batch_size):
if(batch_size + index < A.shape(0)):
data_end_index = index + batch_size
batch_data = A[index:batch_end_index,:]
else:
data_end_index = index + batch_size - A.shape(0) #550+100-600 = 50
batch_data = A[500 to 549 and 0 to 49] # How to slice here ?
Как выполнить последний шаг?
2 ответа
Ты можешь попробовать:
import numpy as np
data=np.random.rand(550,10)
batch_size=100
for index in range(0,data.shape[0],batch_size):
batch=data[index:min(index+batch_size,data.shape[0]),:]
print(batch.shape)
выход:
(100, 10)
(100, 10)
(100, 10)
(100, 10)
(100, 10)
(50, 10)
Кража данных примера Риккардо, используя numpy.split
:
data=np.random.rand(550,10)
batch_size=100
q, block_end = data.shape[0] // batch_size, q * batch_size
batch = np.split(data[:block_end], q) + [data[block_end:]]
[*map(np.shape, batch)]
Out[89]: [(100, 10), (100, 10), (100, 10), (100, 10), (100, 10), (50, 10)]