numpy - 稀疏矩阵上的 einsum

标签 numpy sparse-matrix sparse-array

似乎是 numpy 的 einsum功能不适用于 scipy.sparse矩阵。有没有其他方法可以做这些事情einsum可以处理稀疏矩阵吗?

回应@eickenberg 的回答:我想要的特定 einsum 是 numpy.einsum("ki,kj->ij",A,A) - 行的外积之和。

最佳答案

einsum使用 np.nditer 的 C 版本将索引字符串转换为计算. http://docs.scipy.org/doc/numpy/reference/arrays.nditer.html是对 nditer 的一个很好的介绍.特别注意 Cython例子在最后。

https://github.com/hpaulj/numpy-einsum/blob/master/einsum_py.pyeinsum 的 Python 模拟.
scipy.sparse有自己的代码(最终用 C 语言编写)来执行基本运算、求和、矩阵乘法等。稀疏矩阵有自己的数据结构。它们可以是列表、字典或一组 numpy 数组。可以使用 Numpy 表示法,因为 sparse有合适的__xxx__方法。

稀疏矩阵是 matrix ,一个二维数组对象。稀疏einsum可以写,但最终会使用稀疏矩阵乘法,而不是 nditer .所以充其量这将是一个符号方便。

稀疏 csr_matrix.dot是:

def dot(self, other):
    """Ordinary dot product
    ...
    """
    return self * other

A=sparse.csr_matrix([[1,2],[3,4]])
A.dot(A.T).A
(A*A.T).A
A.__rmul__(A.T).A
A.__mul__(A.T).A
np.einsum('ij,kj',A.A,A.A)
# array([[ 5, 11],
#        [11, 25]])

关于numpy - 稀疏矩阵上的 einsum,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23322866/

相关文章:

python - 从不规则间隔的向量中选择近似规则的样本

python - 计算中的不一致 - Python 和 numpy

java - 在一个巨大的稀疏矩阵中找到所有循环

Android SparseArray<SparseArray<Object>> 初始化

java - Android 中的 SparseArray 克隆

MATLAB 张量 : Append row and fill in NaN instead of 0 for empty elements

python - Pytorch 张量到 numpy 数组

python - 如何使用 isnan 键对 numpy 数组进行排序?

c++ - std::vector<std::vector<type>> 用于稀疏矩阵结构或其他?

java - 基于标准Stack的稀疏矩阵实现产生编译错误