标签: sparse-matrix

使用NA默认条目创建(和访问)稀疏矩阵

在了解了在R中使用稀疏矩阵选项之后,我想使用Matrix包从以下数据框创建稀疏矩阵,并使所有其他元素都是NA.

     s    r d
1 1089 3772 1
2 1109  190 1
3 1109 2460 1
4 1109 3071 2
5 1109 3618 1
6 1109   38 7
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用以下内容创建一个稀疏矩阵,像往常一样访问元素:

> library(Matrix)
> Y <- sparseMatrix(s,r,x=d)
> Y[1089,3772]
[1] 1
> Y[1,1]
[1] 0
Run Code Online (Sandbox Code Playgroud)

但如果我想将默认值设为NA,我尝试了以下内容:

  M <- Matrix(NA,max(s),max(r),sparse=TRUE)
  for (i in 1:nrow(X))
    M[s[i],r[i]] <- d[i]
Run Code Online (Sandbox Code Playgroud)

并得到了这个错误

Error in checkSlotAssignment(object, name, value) : 
  assignment of an object of class "numeric" is not valid for …
Run Code Online (Sandbox Code Playgroud)

r default-value sparse-matrix na

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

HDF5中的稀疏阵列支持

我需要以某种方式在磁盘上存储512 ^ 3阵列,我目前正在使用HDF5.由于阵列稀疏,因此浪费了大量磁盘空间.

HDF5是否为稀疏阵列提供任何支持?

sparse-array hdf5 sparse-matrix

14
推荐指数
2
解决办法
5622
查看次数

Ruby的稀疏矩阵库

我正在寻找一个可以在Ruby中使用的稀疏矩阵库.我目前正在使用由"gsl"gem提供的GNU Scientific Library绑定,但如果我使用专用的稀疏矩阵库,我的应用程序将更好地优化.我调查了linalgNArray库.这三个库中没有一个支持稀疏矩阵优化的存储或操作.

有没有我错过的东西 - 或者现有的C库可能可以编写绑定?我更喜欢前者,后者,因为我之前没有在Ruby中编写C绑定,但我愿意尝试它.

ruby math linear-algebra scientific-computing sparse-matrix

14
推荐指数
1
解决办法
1956
查看次数

在python中反向排序和argsort

我正在尝试用Python编写一个函数(仍然是一个noob!),它返回由tfidf分数的内积所排序的索引和分数.程序是:

  • 在doc idx和所有其他文档之间计算内部产品的向量
  • 按降序排序
  • 将"得分"和指数从第二个返回到结尾(即不是自身)

我目前的代码是:

import h5py
import numpy as np

def get_related(tfidf, idx) :
    ''' return the top documents '''

    # calculate inner product   
    v = np.inner(tfidf, tfidf[idx].transpose())

    # sort
    vs = np.sort(v.toarray(), axis=0)[::-1]
    scores = vs[1:,]

    # sort indices
    vi = np.argsort(v.toarray(), axis=0)[::-1]
    idxs = vi[1:,] 

    return (scores, idxs)
Run Code Online (Sandbox Code Playgroud)

这里tfidf是一个sparse matrix of type '<type 'numpy.float64'>'.

这似乎效率低下,因为排序执行了两次(sort()然后argsort()),结果必须反过来.

  • 这可以更有效地完成吗?
  • 这可以在不使用转换稀疏矩阵的情况下完成toarray()吗?

python information-retrieval numpy scipy sparse-matrix

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

来自scipy CSR稀疏矩阵的访问值,列索引和row_ptr数据

我有一个大矩阵,我想转换为稀疏的CSR格式.

当我做:

import scipy as sp
Ks = sp.sparse.csr_matrix(A)

print Ks
Run Code Online (Sandbox Code Playgroud)

A密集,我得到

 (0, 0) -2116689024.0
 (0, 1) 394620032.0
 (0, 2) -588142656.0
 (0, 12)    1567432448.0
 (0, 14)    -36273164.0
 (0, 24)    233332608.0
 (0, 25)    23677192.0
 (0, 26)    -315783392.0
 (0, 45)    157961968.0
 (0, 46)    173632816.0
Run Code Online (Sandbox Code Playgroud)

等等...

我可以使用以下方法获取行索引,列索引和值的向量:

Knz = Ks.nonzero()
sparserows = Knz[0]
sparsecols = Knz[1]

#The Non-Zero Value of K at each (Row,Col) 
vals = np.empty(sparserows.shape).astype(np.float)
for i in range(len(sparserows)):

    vals[i] = K[sparserows[i],sparsecols[i]]
Run Code Online (Sandbox Code Playgroud)

但是有可能提取稀疏CSR格式(值,列索引,行指针)中所包含的向量吗?

SciPy的文档解释了可以从这三个向量生成CSR矩阵,但我想做相反的事情,将这三个向量输出.

我错过了什么?

谢谢你的时间!

python csr scipy sparse-matrix

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

Fortran 90/95稀疏矩阵库?

我正在寻找一个库来处理fortran 90/95中的稀疏矩阵.我只需要非常基本的操作,如矩阵向量乘法.你建议我用什么?

我已经搜索过了一个扩展名(?)到BLAS,称为"稀疏blas",在爆炸技术论坛规范的第3章中有记录:

http://www.netlib.org/blas/blast-forum/ ,

看起来很理想 根据该文档,库应该有一个fortran 95接口.但是,我无法在任何可以下载的地方找到该规范的实际实现.我有点认为fortran 95稀疏blas规范并没有在任何地方真正实现?反正不是开源的.

我还找到了一个名为sparsekit的库:

http://people.sc.fsu.edu/~jburkardt/f_src/sparsekit/sparsekit.html

任何人都有这两个中的任何一个的经验,或任何其他稀疏矩阵库为fortran 90/95?我想建议使用哪一个,以及从哪里获取它(在sparsekit的情况下,源代码可通过上面的链接获得).对于稀疏矩阵,有没有类似"标准"的东西,比如BLAS用于密集矩阵?

干杯,

阿恩

fortran blas sparse-matrix fortran90 fortran95

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

如何将稀疏矩阵转换为索引矩阵和非零元素值

我们可以从与所述非零元素的索引,并且值构造一个稀疏矩阵sparseMatrixspMatrix.有没有函数将稀疏矩阵转换回索引和所有非零元素的值?例如

i <- c(1,3,5); j <- c(1,3,4); x <- 1:3
A <- sparseMatrix(i, j, x = x)

B <- sparseToVector(A)
## test case:
identical(B,cbind(i,j,x))
Run Code Online (Sandbox Code Playgroud)

是否有任何功能做类似的工作sparseToVector

r sparse-matrix

14
推荐指数
2
解决办法
6850
查看次数

sparse.model.matrix在R中丢失行

我正在研究data.frame看起来很有用的glm功能,所以我决定我会对模型矩阵的稀疏重复进行处理,这样我就可以把这个稀疏矩阵放到glmnet函数中了.但sparse.model.matrix看起来要从原始矩阵中删除一些行.知道为什么会这样,以及任何解决方案如何避免这种情况?代码如下:

> mm <- sparse.model.matrix(~clicks01+kl_tomek*bc1+hours+plec+1, 
data = daneOst)
> dim(mm)
[1] 1253223     292
> dim(daneOst)
[1] 1258836       6
Run Code Online (Sandbox Code Playgroud)

r matrix sparse-matrix

14
推荐指数
2
解决办法
5021
查看次数

使用sklearn在大型稀疏矩阵上执行PCA

我试图在巨大的稀疏矩阵上应用PCA,在下面的链接中它说sklearn的randomizedPCA可以处理scipy稀疏格式的稀疏矩阵. 在非常大的稀疏矩阵上应用PCA

但是,我总是得到错误.有人可以指出我做错了什么.

输入矩阵'X_train'包含float64中的数字:

>>>type(X_train)
<class 'scipy.sparse.csr.csr_matrix'>
>>>X_train.shape
(2365436, 1617899)
>>>X_train.ndim 
2
>>>X_train[0]     
<1x1617899 sparse matrix of type '<type 'numpy.float64'>'
    with 81 stored elements in Compressed Sparse Row format>
Run Code Online (Sandbox Code Playgroud)

我想做:

>>>from sklearn.decomposition import RandomizedPCA
>>>pca = RandomizedPCA()
>>>pca.fit(X_train)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/RT11/.pyenv/versions/2.7.9/lib/python2.7/site-packages/sklearn/decomposition/pca.py", line 567, in fit
    self._fit(check_array(X))
  File "/home/RT11/.pyenv/versions/2.7.9/lib/python2.7/site-packages/sklearn/utils/validation.py", line 334, in check_array
    copy, force_all_finite)
  File "/home/RT11/.pyenv/versions/2.7.9/lib/python2.7/site-packages/sklearn/utils/validation.py", line 239, in _ensure_sparse_format
    raise TypeError('A sparse matrix was passed, but dense '
TypeError: …
Run Code Online (Sandbox Code Playgroud)

python sparse-matrix svd pca scikit-learn

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

寻找大稀疏矩阵的最小特征向量,在 SciPy 中比在 Octave 中慢 100 倍以上

我正在尝试计算几个 (5-500) 特征向量,这些特征向量对应于大型对称方形稀疏矩阵(高达 30000x30000)的最小特征值,其中非零值小于 0.1%。

我目前在 shift-invert 模式 (sigma=0.0) 下使用 scipy.sparse.linalg.eigsh,我通过有关该主题的各种帖子发现这是首选解决方案。但是,在大多数情况下,解决问题最多需要 1 小时。另一方面,如果我要求最大的特征值(在我的系统上为亚秒),则该函数非常快,这是文档中预期的。

由于我在工作中更熟悉 Matlab,所以我尝试在 Octave 中解决这个问题,使用 eigs (sigma=0) 在短短几秒钟内(低于 10 秒)给了我相同的结果。由于我想对包括特征向量计算在内的算法进行参数扫描,因此在 python 中也能获得这种时间增益。

我首先更改了参数(尤其是容差),但在时间尺度上并没有太大变化。

我在 Windows 上使用 Anaconda,但试图将 scipy 使用的 LAPACK/BLAS(这是一个巨大的痛苦)从 mkl(默认 Anaconda)切换到 OpenBlas(根据文档由 Octave 使用),但看不到变化表现。

我无法弄清楚,使用的 ARPACK 是否有改变(以及如何改变)?

我将以下代码的测试用例上传到以下 dropbox 文件夹:https ://www.dropbox.com/sh/l6aa6izufzyzqr3/AABqij95hZOvRpnnjRaETQmka?dl =0

在 Python 中

import numpy as np
from scipy.sparse import csr_matrix, csc_matrix, linalg, load_npz   
M = load_npz('M.npz')
evals, evecs = linalg.eigsh(M,k=6,sigma=0.0)
Run Code Online (Sandbox Code Playgroud)

在八度:

M=dlmread('M.txt');
M=spconvert(M);
[evecs,evals] = eigs(M,6,0);
Run Code Online (Sandbox Code Playgroud)

任何帮助是appriciated !

我根据评论和建议尝试了一些其他选项:

Octave: eigs(M,6,0)eigs(M,6,'sm') …

python octave scipy sparse-matrix eigenvector

14
推荐指数
1
解决办法
1852
查看次数