Эффективный способ нарезать двумерный массив и пропускать индексы; извлекать небольшие сегменты многократно - PullRequest
0 голосов
/ 07 февраля 2020

У меня есть 2D numpy массив D, который имеет Размеры (1000, 800). Я хочу извлечь из массива небольшие сегменты длиной 20:

Предположим, что D [0] [:] равно [1, 2, 3, 4, 5, 6, ...], и я хочу сегменты 3, я бы хотел первые три числа (1, 2, 3), затем пропустить некоторые индексы (скажем, 60), извлечь 3, пропустить 60 и т. д.

Я знаю, что могу сделать D [:, start: end: step], но есть ли что-то вроде D [:, start: end: step *: skip *]?

В идеале я хочу что-то вроде:

D = np.random.random((1000,800))
parts = D[:,0:20:1:skip_n_indices_and_repeat]

Я ценю ваше время и ответы. Если у вас есть более простое или другое решение, пожалуйста, предложите. Спасибо.

1 Ответ

1 голос
/ 07 февраля 2020

Без использования каких-либо специальных методов можно сгенерировать маску нужных индексов:

D = np.random.random((1000,800))
step = 3
skip = 60
idx = np.arange(800)
needed_indexes = idx%(skip+step)<step

Затем вы можете вернуть копию вашего массива стандартным способом:

>>> E = D[:,needed_indexes]
>>> E.shape
(1000, 39)
...