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

2024-05-14 08:53:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试做一些非常简单的事情,但是被Python中关于稀疏矩阵和向量的大量信息弄糊涂了。你知道吗

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

这是我试过的,它在很多方面都出错了。你知道吗

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);

Tags: fromimport信息sslasnpzeros矩阵
1条回答
网友
1楼 · 发布于 2024-05-14 08:53:59

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

x[0, 1] = 1

第二,向量x和y的外积等价于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)

输出:

(array([[  5.55111512e-17],
       [ -1.00000000e+00],
       [  0.00000000e+00],
       [ -2.77555756e-17],
       [  1.11022302e-16]]), array([ 2.]), array([[ 0., -1.,  0.,  0.,  0.,  0.]]))

相关问题 更多 >

    热门问题