IIUC вот один из способов подойти к этому:
A = np.random.randint(1000, size=(100, 100))
b = np.random.randint(40,60, size=(100))
Где b
может быть:
array([49, 47, 40, 44, 53, 47...
Итак, например, b[0]
, IIUC вы хотите индексировать A[0]
из столбцов 39:59
, A[1]
из 37:57
и т. Д. Итак, прежде всего, давайте создадим ndarray, который будет использоваться к индексу A
:
ar = np.arange(-10, 11)
ix = np.add.outer(b,ar)
array([[39, 40, 41, ..., 57, 58, 59],
[37, 38, 39, ..., 55, 56, 57],
[30, 31, 32, ..., 48, 49, 50],
...,
Теперь мы можем использовать ix
для индексации A
и получить массив (100, 20)
со столбцами интереса в каждой строке. Для этого мы можем использовать расширенное индексирование :
A[np.arange(len(b))[:,None], ix][:,:-1]
array([[448, 963, 199, ..., 40, 300, 623],
[258, 905, 862, ..., 517, 671, 399],
[629, 408, 83, ..., 490, 883, 68],
...,
[188, 368, 598, ..., 579, 925, 739],
[131, 318, 28, ..., 444, 487, 362],
[135, 801, 123, ..., 308, 579, 41]])