У меня есть 2D-массив numpy и список списков индексов, для которых я хочу вычислить сумму соответствующих 1D-векторов из массива numpy. Это можно легко сделать с помощью цикла for или через понимание списка, но мне интересно, можно ли его векторизовать. С подобным кодом я получаю примерно 40-кратное ускорение от векторизации.Векторизация многократного вызова массива с различными индексами
Вот пример кода:
import numpy as np
indices = [[1,2],[1,3],[2,0,3],[1]]
array_2d = np.array([[0.5, 1.5],[1.5,2.5],[2.5,3.5],[3.5,4.5]])
soln = [np.sum(array_2d[x], axis=-1) for x in indices]
(изменить): Обратите внимание, что индексы не являются (х, у) координаты для array_2d, вместо индексов [0] = [1,2] представляет собой первый и второй векторы (строки) в array_2d. Количество элементов каждого списка в индексах может быть переменным.
Это то, что я хотел бы надеяться, чтобы быть в состоянии сделать:
vectorized_soln = np.sum(array_2d[indices[:]], axis=-1)
Кто-нибудь знает, есть ли какие-нибудь способы достижения этой цели?
Является последним элементом 'индексов', которые должны быть' [2] '? Остальные элементы имеют длину 2. –
Я отредактировал сообщение и объяснил немного больше того, что представляют собой индексы. Первоначально да, элементы в индексах могут иметь переменный размер, но операция, выполняемая над соответствующими векторами в array_2d, должна работать одинаково хорошо (вещи, такие как суммы или средние), и выводить один вектор. – irozada