Performance 如何有效地得到被另一个矩阵索引的子矩阵?

Performance 如何有效地得到被另一个矩阵索引的子矩阵?,performance,pandas,numpy,matrix,Performance,Pandas,Numpy,Matrix,现在我有了一个矩阵:test_projs和一个索引矩阵GT_index GT_索引每行的每个元素表示测试_项目中该行所需元素的索引。现在我想计算选择区域中每一行的总和 一个简单的例子: 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,

现在我有了一个矩阵:test_projs和一个索引矩阵GT_index

GT_索引每行的每个元素表示测试_项目中该行所需元素的索引。现在我想计算选择区域中每一行的总和

一个简单的例子:

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
上述示例的结果是:


但是速度很慢。您知道如何提高it的效率吗。

这里有一个使用
NumPy
数组和技术的方法-

arr1 = test_projs.values
arr2 = GT_index.values
out = arr1[np.arange(arr2.shape[0]),arr2.T].sum(0)

我正在删除“matlab”标签,因为这个问题与matlab无关。你的代码对我不起作用。你能使用像test_projs=pd.DataFrame({0:[1,2,3],1:[4,5,6],2:[7,8,9],3:[1,3,5]},index=[3,4,5])这样的小数据帧来添加所需的输出吗?@jezrael是的,我会给出这个例子。非常感谢!!在我的机器上,你的解决方案比我的快10倍!