gpt4 book ai didi

python - 复杂的矩阵乘法

转载 作者:太空宇宙 更新时间:2023-11-04 08:49:04 24 4
gpt4 key购买 nike

我有一个(密集)矩阵 n x n x m 和一个稀疏向量 (scipy.sparse) 1 x m。如果我们看一下我的密集 n x n x m 矩阵,它可以被解释为一个 n x n 矩阵,每个位置都有一个 m x 1 向量。现在我想计算我的稀疏向量与 n x n 矩阵中的每个 m x 1 密集向量的点积,产生一个包含所有这些点积的 n x n 矩阵。

一种方法是构建一个 for 循环来遍历 n x n 矩阵,然后使用 scipy.sparse 的 .dot() 函数计算矩阵中每个向量的点积。但是,我正在寻找一种以矢量化方式完全执行此计算以提高效率的方法。这可能吗?如果不是,Python 中遍历我的 n x n 矩阵的最快方法是什么?

最佳答案

你可以使向量密集并使用 doteinsum:

ans = arr.dot(vec.A.T)
# or
ans = numpy.einsum('ijk,k->ij', arr, vec.A.squeeze())

如果向量非常稀疏,首先从数组中选择与向量中的非零值相对应的项可能是值得的:

ans = arr[...,vec.nonzero()[1]].dot(vec.data)

对于非常大的数据,使用 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)

关于python - 复杂的矩阵乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37300676/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com