Вот данные, которые у вас есть:
import numpy as np
full_len = 5 # In your case, 60_000
cols = 3 # In your case, 3072
nd1 = np.arange(full_len*cols).reshape(full_len,cols)
Вот что вы можете сделать, чтобы «сгенерировать» фрагменты:
Вариант 1, Использование numpy.array_split ():
from math import ceil
step_size = 2 # In your case, 1_000
split_list = np.array_split(nd1,ceil(full_len/step_size), axis=0)
print (split_list)
split_list
теперь является списком срезов в nd1
.Зацикливая этот список, вы можете получить доступ к отдельным слайсам как split_list[0]
, split_list[1]
и т. Д., И каждый из этих слайсов будет представлять собой nd1
и может использоваться точно так же, как и любой другой массив с нулевыми значениями..
Вывод для варианта 1:
Вот вывод, показывающий, что последний фрагмент был немного короче, чем другие обычные:
[array([[0, 1, 2],
[3, 4, 5]]), array([[ 6, 7, 8],
[ 9, 10, 11]]), array([[12, 13, 14]])]
Параметр2, с помощью явного среза:
step_size = 2 # In your case, 1_000
myrange = range(0, full_len, step_size)
for r in myrange:
my_slice_array = nd1 [r:r+step_size]
print (my_slice_array.shape)
Вывод для варианта 2:
(2, 3)
(2, 3)
(1, 3)
Обратите внимание, что в отличие от нарезки списков, нарезка массива с пустым фрагментом не делает копию источникаданные массива.Это только создает представление в пределах границ среза, на основе существующих данных исходного массива.Это относится как к Вариант 1 , так и к Вариант 2 , так как оба включают создание срезов.