Python / Numpy: Как извлечь внутреннюю часть любого размера массива numpy? - PullRequest
1 голос
/ 20 сентября 2019

Предположим, у меня есть массив N, который может иметь любые размеры len (A.shape) может быть 1,2,3, и т. Д.и соответствующий массив, обрезать который len (crop) = len (A.shape) и я хочу извлечь внутренние значения A, используя обрезку.Вот пример для двумерного массива.

    A = np.random.rand(30).reshape([5,6])
    crop = np.array([1,2])

Требуемый вывод:

    A[crop[0]:-crop[0], crop[1]:-crop[1])

Предполагается, что значение кадрирования будет разумным в отношении размера A. Как это сделать для любогоразмерность массива A?

1 Ответ

3 голосов
/ 20 сентября 2019

Вот один способ с slice обозначением -

A[tuple([slice(i,-i,None) for i in crop])]

Или с сокращением np.s_ -

A[tuple([np.s_[i:-i] for i in crop])]

Если начальный и конечный индексы даны для каждого измерения, мы можем сделать что-то подобное, как показано в Slicing NumPy array given start and end indices for generic dimensions.

...