Хороший способ нарезать массив numpy на основе формы другого массива - PullRequest
1 голос
/ 09 января 2020

Возьмем два массива произвольной формы, но где каждое из измерений второго меньше или равно размерам первого. Например:

np.random.seed(8675309)
a = np.random.choice(10, 3**3).reshape(3,3,3)
b = np.zeros(2**3).reshape(2,2,2)

Мне нужно следующее:

c = a[:b.shape[0], :b.shape[1], :b.shape[2]]

, но для массива b с произвольной формой, потенциально с меньшими размерами. Как я мог сделать это программно? Такой, что

def reference_slicer(a, b):
    ???
    return c

reference_slicer(a,b) == c

1 Ответ

2 голосов
/ 09 января 2020

Ты имеешь в виду что-то подобное?

def reference_slicer(a, b):
    index = [slice(0, dim) for dim in b.shape]
    for i in range(len(b.shape), len(a.shape)):
        index.append(slice(0,a.shape[i]))
    return a[index]

#array([[[ True,  True],
#        [ True,  True]],
#       [[ True,  True],
#        [ True,  True]]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...