python - 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 端,但我没有想法。欢迎任何帮助。感谢您的时间,
解决方案
你可以使用np.add.at
np.add.at(a,tuple(coocPairs.T),1)
如果这还不够快,那么还有更快但基于不那么直接的np.bincount
解决方案。那些依赖于使用np.ravel_multi_index
.
推荐阅读
- sql - 如何在sql中对两个条件求和?
- r - 如何在ggplot中叠加geom_rect和geom_boxplot?
- python - 如何使用 sympy 显式求解函数
- python - 创建 pypi 包时如何避免“从模块导入模块”?
- python - 无法第二次执行 zip 项目
- ios - 如何快速更改tableView中向左滑动的单元格颜色
- python - AttributeError:模块'select'没有属性'select'错误ASYNCIO
- jwt - 为什么在 Keycloak 中的默认客户端“admin-cli”中未在 JWT 中显示构建声明?
- javascript - 单击按钮时打开所有 Ion Item Sliding
- python - 如何将图像文件转换为张量