如何在Python中使用稀疏向量和矩阵?

时间:2016-03-30 13:27:56

标签: python matrix sparse-matrix

我正在尝试做一些非常简单的事情,但对Python中稀疏矩阵和向量的丰富信息感到困惑。

我想创建两个向量,x和y,长度为5,长度为6,稀疏。然后我想在每一个中设置一个坐标。然后我想创建一个稀疏的矩阵A,它是5 x 6并在其中添加x和y之间的外积。然后我想在A上做SVD。

这是我尝试过的,而且在很多方面出了问题。

from scipy import sparse;
import numpy as np;
import scipy.sparse.linalg as ssl;

x = sparse.bsr_matrix(np.zeros(5));
x[1] = 1;
y = sparse.bsr_matrix(np.zeros(6));
y[1] = 2;
A = sparse.coo_matrix(5, 6);

A = A + np.outer(x,y.transpose())

svdresult = ssl.svds(A,1);

1 个答案:

答案 0 :(得分:0)

首先,您应该在构建之前确定要在稀疏矩阵中存储的数据。否则,您应该使用sparse.csc_matrixsparse.csr_matrix代替。然后您可以分配或更改这样的数据:

pandoc notes.txt -o notes.pdf

第二,向量x和y的外积等价于x[0, 1] = 1

<小时/> 这是工作代码:

x.transpose() * y

输出:

from scipy import sparse
import numpy as np
import scipy.sparse.linalg as ssl

x = np.zeros(5)
x[1] = 1
x_bsr = sparse.bsr_matrix(x)
y = np.zeros(6)
y[1] = 2
y_bsr = sparse.bsr_matrix(y)

A = sparse.coo_matrix((5, 6)) # Sparse matrix 5 x 6
B = x_bsr.transpose().dot(y_bsr) # Outer product of x and y

svdresult = ssl.svds((A + B), 1)