【发布时间】:2017-01-14 01:37:57
【问题描述】:
是否有一个表达式(可能使用np.tensordot)最能表达地捕获对角块的块矩阵和相应大小的向量之间的稀疏矩阵向量乘法?
我有一个工作实现,可以执行我想要的确切操作,但我使用了两个 python 循环(见下文)而不是一个合适的 numpy 命令,它可能存在。
例如:
import numpy as np
outer_size = 2
inner_size = 5
shape = (outer_size, outer_size, inner_size)
diag_block = np.arange(np.prod(shape)).reshape(shape)
true_diag = np.bmat([[np.diag(diag_block[i,j]) for j in range(shape[1])] for i in range(shape[0])]).A
x = np.arange(shape[1] * shape[2])
def sparse_prod(diags, x):
outer_size = diags.shape[0]
return np.hstack(sum(diags[i] * x.reshape(outer_size, -1)) for i in range(outer_size))
print(true_diag.dot(x))
print(sparse_prod(diag_block, x))
【问题讨论】: