Нарезка 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 ?

Как выполнить последний шаг?


person Pawandeep Singh    schedule 09.02.2018    source источник
comment
Возможный дубликат обтекания фрагментов в Python/numpy   -  person FlyingTeller    schedule 09.02.2018


Ответы (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)
person riccardo nizzolo    schedule 09.02.2018
comment
Чтобы избежать дублирования между партиями, я предпочитаю for index in range(0, data.shape[0], batch_size+1) - person Davis; 20.04.2021

кража данных примера riccardo, используя 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)]
person f5r5e5d    schedule 09.02.2018