我正在尝试计算scipy解析矩阵和numpy数组之间的点积。
首先,我使用的是numpy矩阵,您可以在以下代码中看到:
def power_iteration(matrix, n):
b_k = np.random.rand(matrix.shape[1])
for _ in range(n):
b_k = np.dot(matrix, b_k)
return b_k
这里矩阵是一个numpy矩阵,没有错误发生。
如果您将scipy稀疏矩阵作为参数传递,则会发生以下错误:ValueError:形状(6762,6762)和(1,6762)未对齐:6762(dim 1)!= 1(dim 0)
我改变了
b_k = np.random.rand(matrix.shape[1])
成
b_k = np.random.rand(matrix.shape[1], 1)
这使得dot产品工作,但不会返回正确的b_k形状。我需要的形状是:(6762,)
编辑:到目前为止,我试图像这样重塑:
b_k = np.reshape(b_k, (matrix.shape[1],))
但这会将形状(6762,1)转换为(1,6662),而不是(6762,)
有小费吗?谢谢!
似乎为了在稀疏矩阵上使用np.dot
,您需要先使用matrix.toarray()
将其转换为密集矩阵。另见https://docs.scipy.org/doc/scipy/reference/sparse.html#matrix-vector-product