标签: sparse-matrix

scipy.sparse默认值

稀疏矩阵格式(dok)假设不在字典中的键的值等于零.有没有办法让它使用除零以外的默认值?

还有,有办法计算稀疏矩阵的日志(类似于常规numpy矩阵中的np.log)

python scipy sparse-matrix

9
推荐指数
1
解决办法
2429
查看次数

在python/R中使用稀疏矩阵的利弊?

我正在使用python中的大型稀疏矩阵(文本生成的文档特征矩阵).它需要相当多的处理时间和内存来咀嚼这些,我想稀疏矩阵可以提供一些改进.但是我担心使用稀疏矩阵库会使插入其他python(和R,通过rpy2)模块变得更加困难.

穿过这座桥的人是否已经提供了一些建议?在性能,可伸缩性和兼容性方面,在python/R中使用稀疏矩阵的优缺点是什么?

python r sparse-matrix

8
推荐指数
1
解决办法
749
查看次数

Scipy的稀疏eigsh()用于小特征值

我正在尝试使用NumPy/SciPy编写一个频谱聚类算法,用于更大(但仍易处理)的系统,利用SciPy的稀疏线性代数库.不幸的是,我遇到了eigsh()的稳定性问题.

这是我的代码:

import numpy as np
import scipy.sparse
import scipy.sparse.linalg as SLA
import sklearn.utils.graph as graph

W = self._sparse_rbf_kernel(self.X_, self.datashape)
D = scipy.sparse.csc_matrix(np.diag(np.array(W.sum(axis = 0))[0]))
L = graph.graph_laplacian(W) # D - W
vals, vects = SLA.eigsh(L, k = self.k, M = D, which = 'SM', sigma = 0, maxiter = 1000)
Run Code Online (Sandbox Code Playgroud)

sklearn库引用scikit-learn包,特别是用于从稀疏SciPy矩阵计算图拉普拉斯的方法.

_sparse_rbf_kernel是我编写的用于计算数据点的成对亲和力的方法.它通过从图像数据创建稀疏亲和度矩阵来操作,特别是通过仅计算每个像素周围的8个邻域的成对亲和力(而不是使用scikit-learn rbf_kernel方法对所有像素成对,对于记录也不能解决这个问题) .

由于拉普拉斯非标准化,我正在寻找系统的最小特征值和相应的特征向量.我知道ARPACK不适合寻找小的特征值,但我试图使用shift-invert来找到这些值,但仍然没有取得多大成功.

使用上述参数(具体而言sigma = 0),我收到以下错误:

RuntimeError: Factor is exactly singular
Run Code Online (Sandbox Code Playgroud)

有了sigma = 0.001 …

python cluster-analysis linear-algebra scipy sparse-matrix

8
推荐指数
1
解决办法
3839
查看次数

scipy.sparse:将行设置为零

假设我有一个CSR格式的矩阵,将行(或行)设置为零的最有效方法是什么?

以下代码运行缓慢:

A = A.tolil()
A[indices, :] = 0
A = A.tocsr()
Run Code Online (Sandbox Code Playgroud)

我不得不转换为scipy.sparse.lil_matrix因为CSR格式似乎既不支持花哨的索引,也不支持将值设置为切片.

row scipy sparse-matrix

8
推荐指数
1
解决办法
3640
查看次数

将稀疏矩阵分成两个

问题:如何根据列表中的值将1个稀疏矩阵拆分为2?

也就是说,我有一个稀疏矩阵X:

>>print type(X)
<class 'scipy.sparse.csr.csr_matrix'>
Run Code Online (Sandbox Code Playgroud)

我在脑海中将其视为列表列表,如下所示:

>>print X.todense()
[[1,3,4]
 [3,2,2]
 [4,8,1]]
Run Code Online (Sandbox Code Playgroud)

我有一个如下所示的列表y:

y = [-1, 
      3, 
     -4]
Run Code Online (Sandbox Code Playgroud)

我如何X分成两个稀疏矩阵,取决于相应的值y是正还是负?例如,我怎样才能得到:

>>print X_pos.todense()
 [[3,2,2]] 
>>print X_neg.todense()
 [[1,3,4]
  [4,8,1]]
Run Code Online (Sandbox Code Playgroud)

结果(X_posX_neg)也应该是稀疏矩阵,因为它只是将稀疏矩阵拆分开始.

谢谢!

python numpy scipy sparse-matrix

8
推荐指数
1
解决办法
4034
查看次数

Matlab:每行或每列的第一个非零元素

例如,

A = [ -1   0  -2   0   0
   2   8   0   1   0
   0   0   3   0  -2
   0  -3   2   0   0
   1   2   0   0  -4];
Run Code Online (Sandbox Code Playgroud)

如何获得每行的第一个非零元素的向量?

matlab matrix sparse-array sparse-matrix

8
推荐指数
3
解决办法
1万
查看次数

在Java中表示上三角矩阵的最佳数据结构是什么?

假设给出了一个上三角整数矩阵.在Java中存储它的最佳方法是什么?天真的2d int数组显然效率不高.我提出的解决方案已移至答案部分.

java sparse-matrix

8
推荐指数
2
解决办法
2538
查看次数

为什么cuSparse比cuBlas慢得多,因为稀疏矩阵乘法

最近当我在CUDA TOOLKIT 6.5中使用cuSparse和cuBLAS进行稀疏矩阵乘法时,我发现cuSPARSE在所有情况下都比cuBLAS慢得多!

在我的所有实验中,我cusparseScsrmm在cuSparse和cublasSgemmcuBLAS中使用过.在稀疏矩阵中,总元素的一半为零.我使用的GPU是NVIDIA Titan Black.此外,所有消耗的时间都是nvvp通过NVIDIA提供的工具获得的.以下是一些结果:

实验A:

  1. 稀疏矩阵大小:192x2400
  2. 密集矩阵大小:2400x256
  3. cusparse时间:1.4ms
  4. 古巴拉斯时间:0.21毫秒

实验B:

  1. 稀疏矩阵大小:192x75
  2. 密集矩阵大小:75x1024
  3. cusparse时间:0.27ms
  4. 古巴拉斯时间:0.04ms

所以,看到上面列出的结果是很奇怪的.因为cuSPARSE专门用于处理稀疏矩阵操作,所以它怎么能比cuBLAS更慢!?如果是这样,则根本不需要使用cuSPARSE.你能告诉我结果的任何解释吗?另外,你能否提出任何其他方法来加速稀疏矩阵乘法?

cuda matrix multiplication sparse-matrix cublas

8
推荐指数
1
解决办法
5347
查看次数

如何为Scipy的csr_matrix提供行名和列名?

我不知道这是否是可能的,而且是可能幼稚的问题,但我怎么能集R的相当于rownames()colnames()一个scipy.sparse.csr.csr_matrix

我看到这my_matrix.dtype.names在这里不起作用,我找不到这种稀疏矩阵的任何"索引"等价物......

此外,pandas.sparse.*由于一些未解决的问题,这里不是一个选择......

非常感谢你的帮助,

python scipy sparse-matrix

8
推荐指数
1
解决办法
4642
查看次数

Scipy稀疏矩阵乘法

我有使用numpy数组的矩阵乘法矩阵示例:

import numpy as np
m = np.array([[1,2,3],[4,5,6],[7,8,9]])
c = np.array([0,1,2])
m * c
array([[ 0,  2,  6],
       [ 0,  5, 12],
       [ 0,  8, 18]])
Run Code Online (Sandbox Code Playgroud)

如果m是scipy稀疏CSR矩阵,我怎么能做同样的事情?这会导致尺寸不匹配:

sp.sparse.csr_matrix(m)*sp.sparse.csr_matrix(c)
Run Code Online (Sandbox Code Playgroud)

python numpy matrix scipy sparse-matrix

8
推荐指数
1
解决办法
2万
查看次数