首页 > 解决方案 > Numpy:填充共现矩阵的最快方法

问题描述

我有一长串索引元组(很多重复项),以及一个 n 乘 n 索引的矩阵。每个元组代表一个共现。

例如:

a = np.zeros(shape=(indexCount,indexCount))

我试过这个:

for i1,i2 in coocPairs:  #for instance (2374, 22003)
   a[i1][i2}+=1  #takes way too long

或者:

np.put(a,coocPairs,1) #which obviously does not increment

或者也:

np.add(a,coocPairs,1) #which takes even longer.

在一个理想的世界中,会有一个函数获取我的元组列表,并用它构建一个共现矩阵,但是唉(文档不是很有帮助)。我认为解决方案可能更多地出现在代码的 python 端,但我没有想法。欢迎任何帮助。感谢您的时间,

标签: pythonnumpy

解决方案


你可以使用np.add.at

np.add.at(a,tuple(coocPairs.T),1)

如果这还不够快,那么还有更快但基于不那么直接的np.bincount解决方案。那些依赖于使用np.ravel_multi_index.


推荐阅读