sjo*_*999 1 python numpy matrix scipy sparse-matrix
我有一个(密集)矩阵nxnxm和一个稀疏矢量(scipy.sparse)1 x m.如果我们查看我的密集nxnxm矩阵,它可以被解释为在每个位置amx 1向量上的nxn矩阵.现在我想用nxn矩阵中的每个mx 1密集向量计算稀疏向量的点积,产生具有所有这些点积的焦虑矩阵.
一种方法是构建一个for循环来循环遍历nxn矩阵,然后使用scipy.sparse的.dot()函数来计算矩阵中每个向量的点积.但是,我正在寻找一种完全以矢量化方式执行此计算的方法,以提高效率.这可能吗?如果没有,Python中循环我的nxn矩阵的最快方法是什么?
小智 5
你可以使矢量密集并使用dot或einsum:
ans = arr.dot(vec.A.T)
# or
ans = numpy.einsum('ijk,k->ij', arr, vec.A.squeeze())
Run Code Online (Sandbox Code Playgroud)
如果向量非常稀疏,那么首先从向量中的非零值对应的数组中选择项目可能是值得的:
ans = arr[...,vec.nonzero()[1]].dot(vec.data)
Run Code Online (Sandbox Code Playgroud)
对于非常大的数据可能更快地使用tensordot,而不是dot,因为它更可能打电话到BLAS函数:
ans = numpy.tensordot(arr, vec.A.T, 1)
# or, for a very sparse vec:
ans = numpy.tensordot(arr[...,vec.nonzero()[1]], vec.data, 1)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
95 次 |
| 最近记录: |