Numpy нарезка фиксированной длины на две оси на основе разных начальных индексов, заданных двумя массивами - PullRequest
1 голос
/ 16 марта 2020

Например, у меня есть nparray:

a = np.arange(48).reshape((3,4,4))
'''
[[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]
  [12 13 14 15]]
 [[16 17 18 19]
  [20 21 22 23]
  [24 25 26 27]
  [28 29 30 31]]
 [[32 33 34 35]
  [36 37 38 39]
  [40 41 42 43]
  [44 45 46 47]]]
'''

У меня есть два массива, которые используются в качестве начальной точки среза по оси = 1, оси = 2 соответственно:

b1 = [0,1,2]
b2 = [1,0,0]

Я хочу достичь, нарезка, как:

a[:,b1:b1+2, b2:b2+2] # but this syntax is wrong

Чтобы получить

[
[
[1,2]
[5,6]
]

[
[20 21]
[24 25]
]

[
[40 41]
[44 45]
]
]

Пожалуйста, дайте мне знать, если вы знаете правильный синтаксис для этого?

1 Ответ

1 голос
/ 16 марта 2020

вы можете использовать встроенные функции enumerate с zip:

list(a[i][f:f+2, s:s+2].tolist() for i, (f, s) in enumerate(zip(b1, b2)))

выход:

[[[1, 2], [5, 6]], [[20, 21], [24, 25]], [[40, 41], [44, 45]]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...