Расширенное индексирование в 3-х мерном Numpy ndarray В Python - PullRequest
0 голосов
/ 27 октября 2019

У меня есть ndarray формы (68, 64, 64), который называется «предсказание». Эти размеры соответствуют image_number, height, width. Для каждого изображения у меня есть кортеж длиной два, который содержит координаты, которые соответствуют определенному местоположению в каждом изображении 64x64, например (12, 45). Я могу сложить эти координаты в другой Numpy ndarray формы (68,2), называемый «местоположения».

Как я могу построить объект среза или создать необходимые индексы расширенного индексирования для доступа к этим местоположениям без использования цикла? Нужна помощь по синтаксису. Целью является использование чистых матриц Numpy без петель.

Структура рабочего цикла

Import numpy as np
# example code with just ones...The real arrays have 'real' data.
prediction = np.ones((68,64,64), dtype='float32')
locations = np.ones((68,2), dtype='uint32')

selected_location_values = np.empty(prediction.shape[0], dtype='float32')
for index, (image, coordinates) in enumerate(zip(prediction, locations)):
    selected_locations_values[index] = image[coordinates]

Желаемый подход

selected_location_values = np.empty(prediction.shape[0], dtype='float32')

correct_indexing = some_function_here(locations). # ?????
selected_locations_values = predictions[correct_indexing]

1 Ответ

0 голосов
/ 27 октября 2019

Должна работать простая индексация:

img = np.arange(locations.shape[0])
r = locations[:, 0]
c = locations[:, 1]
selected_locations_values = predictions[img, r, c]

Причудливая индексация работает путем выбора элементов индексированного массива, которые соответствуют форме передаваемых индексов. В этом случае показатели довольно просты. Вам просто нужен диапазон, чтобы сказать, какому изображению соответствует каждое местоположение.

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