我正在尝试做一些非常简单的事情,但对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);
答案 0 :(得分:0)
首先,您应该在构建之前确定要在稀疏矩阵中存储的数据。否则,您应该使用sparse.csc_matrix或sparse.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)