Как эффективно получить субматрицу, проиндексированную другой матрицей?

Теперь у меня есть матрица: test_projs и индексная матрица GT_index

Каждый элемент каждой строки GT_index означает индекс необходимого элемента этой строки в test_projs. Теперь я хочу вычислить сумму каждой строки в выбранной области.

Простой пример:

test_projs = pd.DataFrame({0:[1,2,3], 1:[4,5,6], 2:[7,8,9], 3:[1,3,5]}, index=[3,4,5])
GT_index = pd.DataFrame({0:[3,2,1], 1:[2,3,2], 2:[1,1,3]}, index=[3,4,5])
b = np.zeros(3)
i = 0
for (index1, row1),(index2,row2) in zip(test_projs.iterrows(),GT_index.iterrows()) :
    b[i]=row1[row2].values.sum()
    i+=1
b

и результат примера выше:

но это медленно. Знаете ли вы, как повысить эффективность этого.

1 ответ

Решение

Вот подход с использованием NumPy массивы и fancy-indexing Техника с этим -

arr1 = test_projs.values
arr2 = GT_index.values
out = arr1[np.arange(arr2.shape[0]),arr2.T].sum(0)
Другие вопросы по тегам