Получить подчиненный 3d-массив с заданным списком индексов с помощью itemgetter - PullRequest
0 голосов
/ 28 августа 2018

l имеет трехмерный массив с именем my_data формы (96, 18, 3) . Я хотел бы получить только некоторые значения, учитывая индекс оси = 1. ось = 1 имеет длину 18

Для этого я попробовал следующее:

from operator import itemgetter
index_1= [3,4,6,7,9,10,12,13]
getter=itemgetter(3,4,6,7,9,10,12,13)
getter(my_data) 

Однако он применяет геттер на первой оси, который уменьшает 96 на 8 Я хочу применить геттер на второй оси, чтобы получить my_data формы (96, 8, 3) .

Я пробовал также:

my_data[:,getter,:]

Я получаю следующую ошибку: *** IndexError: допустимыми являются только целые числа, срезы (:), многоточие (...), numpy.newaxis (None) и целые или логические массивы

1 Ответ

0 голосов
/ 28 августа 2018

Почему бы вам не использовать itemgetter и просто предоставить свой список в качестве индексатора:

index_1= [3,4,6,7,9,10,12,13]
my_data[:,index_1,:]

В наборе данных, таком как ваш:

>>> my_data.shape
(96, 18, 3)

>>> my_data[:,index_1,:].shape
(96, 8, 3)

Минимальный пример:

Возьмите 2-й и 4-й элемент измерения 1 массива (5,5,3):

>>> my_data = np.random.random((5,5,3))
>>> my_data
array([[[ 0.48913302,  0.65967146,  0.16984338],
        [ 0.65309136,  0.61112866,  0.48317725],
        [ 0.75979879,  0.1788647 ,  0.84855963],
        [ 0.95604821,  0.91686885,  0.04629087],
        [ 0.32021119,  0.17582171,  0.44410709]],

       [[ 0.40507398,  0.33866034,  0.57994344],
        [ 0.35664701,  0.82952864,  0.48164719],
        [ 0.53201074,  0.74598244,  0.025587  ],
        [ 0.29090129,  0.85763979,  0.12372515],
        [ 0.66274253,  0.45789019,  0.5960151 ]],

       [[ 0.98733701,  0.21920232,  0.25870197],
        [ 0.83877241,  0.74712859,  0.12972104],
        [ 0.99349399,  0.58134955,  0.90017913],
        [ 0.21030304,  0.68324321,  0.36743921],
        [ 0.26277439,  0.30750822,  0.10385251]],

       [[ 0.73189247,  0.49511839,  0.04785461],
        [ 0.62492651,  0.92238879,  0.04875051],
        [ 0.6779602 ,  0.7643024 ,  0.17460262],
        [ 0.57072683,  0.87087793,  0.5888601 ],
        [ 0.37419042,  0.39583678,  0.30297916]],

       [[ 0.51922434,  0.21364451,  0.32678503],
        [ 0.66437971,  0.6550304 ,  0.61334286],
        [ 0.16475464,  0.84246673,  0.32644154],
        [ 0.56004586,  0.02378533,  0.61112593],
        [ 0.59555996,  0.88077068,  0.44648423]]])

>>> index_1 = [1,3]

>>> my_data[:, index_1, :]
array([[[ 0.65309136,  0.61112866,  0.48317725],
        [ 0.95604821,  0.91686885,  0.04629087]],

       [[ 0.35664701,  0.82952864,  0.48164719],
        [ 0.29090129,  0.85763979,  0.12372515]],

       [[ 0.83877241,  0.74712859,  0.12972104],
        [ 0.21030304,  0.68324321,  0.36743921]],

       [[ 0.62492651,  0.92238879,  0.04875051],
        [ 0.57072683,  0.87087793,  0.5888601 ]],

       [[ 0.66437971,  0.6550304 ,  0.61334286],
        [ 0.56004586,  0.02378533,  0.61112593]]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...