标签: sparse-matrix

10
推荐指数
1
解决办法
3956
查看次数

R中稀疏矩阵的SVD

我的MatrixR 稀疏,显然对我来说太大as.matrix()了(虽然它也不是超大).有as.matrix()问题的调用是在svd()函数内部,所以我想知道是否有人知道不需要先转换为密集矩阵的SVD的不同实现.

r sparse-matrix svd

10
推荐指数
3
解决办法
8483
查看次数

索引带有布尔数组的SciPy稀疏矩阵

可以使用布尔数组索引NumPy数组,以选择与True条目对应的行:

>>> X = np.array([[1,2,3], [4,5,6], [7,8,9]])
>>> rows = np.array([True,False,True])
>>> X[rows]
array([[1, 2, 3],
       [7, 8, 9]])
>>> X[np.logical_not(rows)]
array([[4, 5, 6]])
Run Code Online (Sandbox Code Playgroud)

但是,对于SciPy稀疏矩阵来说,这似乎是不可能的; 索引被视为数字索引,因此False选择第0行并True选择第1行.如何获得类似NumPy的行为?

python indexing numpy scipy sparse-matrix

10
推荐指数
1
解决办法
5285
查看次数

将短列表合并为长向量的算法

我有一个稀疏矩阵类,它的非零和相应的列索引按行顺序存储在基本上类似STL-vector的容器中.他们可能有未使用的容量,如矢量; 要插入/删除元素,必须移动现有元素.

说我有手术insert_erase_replace,或ier简称.ier给定位置p,列索引j和值,可以执行以下操作v:

  • if v==0,ier删除条目p并左移所有后续条目.
  • 如果v!=0j已经存在的p,ier在替换单元格内容pv.
  • 如果v!=0,并且j不存在p,ier则在右移所有后续条目后插入条目v和列索引.jp

所以这一切都是微不足道的.

现在让我说我有ier2,它做了同样的事情,除了它采用包含多个列索引j和相应值的列表v.它还有一个大小n,表示列表中存在多少个索引/值对.但由于向量仅存储非零,有时实际插入大小小于n.

仍然微不足道.

但现在让我说我有ier3,不仅仅是一个列表ier2,而是多个列表.这表示编辑稀疏矩阵的切片.

在某些时候,迭代遍历向量,逐个复制它们并ier2在我们到达每个插入点时插入/替换/删除列表索引/值- 样式变得更有效.如果总插入大小会导致我的向量无论如何都需要调整大小,那么我们就这样做了.

鉴于我的向量比列表的总长度大得多,是否有一种算法可以有效地将列表合并到向量中?

到目前为止,这就是我所拥有的:

  • 传递给每个列表ier3表示条目的净删除(左移),净替换(没有移动,因此便宜)或条目的净插入(右移).那里可能还有一些元素的重新安排,但昂贵的部分是净删除和净插入.

  • 要弄清楚有效地进行网络插入或净删除的算法并不难.

  • 当两者中的任何一个发生时,它会更难.

我唯一能想到的就是两次通过:

  1. 删除/替换
  2. 插入/替换 …

c++ algorithm vector sparse-matrix

10
推荐指数
1
解决办法
482
查看次数

Scipy稀疏CSR矩阵到TensorFlow SparseTensor - Mini-Batch梯度下降

我有一个Scipy稀疏CSR矩阵,它是用SVM-Light格式的稀疏TF-IDF特征矩阵创建的.功能的数量是巨大的,它是稀疏的所以我必须使用SparseTensor,否则它太慢.

例如,要素数量为5,示例文件可能如下所示:

0 4:1
1 1:3 3:4
0 5:1
0 2:1
Run Code Online (Sandbox Code Playgroud)

解析后,训练集如下所示:

trainX = <scipy CSR matrix>
trainY = np.array( [0,1,00] )
Run Code Online (Sandbox Code Playgroud)

我有两个重要问题:

1)我如何有效地将其转换为SparseTensor(sp_ids,sp_weights),以便我使用查找执行快速乘法(WX):https://www.tensorflow.org/versions/master/api_docs/python/nn.html# embedding_lookup_sparse

2)如何在每个时期随机化数据集并重新计算sp_ids,sp_weights以便我可以为小批量梯度下降提供(feed_dict).

像logistic回归这样的简单模型的示例代码将非常受欢迎.图表将是这样的:

# GRAPH
mul = tf.nn.embedding_lookup_sparse(W, X_sp_ids, X_sp_weights, combiner = "sum")  # W.X
z = tf.add(mul, b) #  W.X + b


cost_op = tf.reduce_sum(tf.nn.sigmoid_cross_entropy_with_logits(z, y_true))  # this already has built in sigmoid apply
train_op = tf.train.GradientDescentOptimizer(0.05).minimize(cost_op)  # construct optimizer

predict_op = tf.nn.sigmoid(z) # sig(W.X + b)
Run Code Online (Sandbox Code Playgroud)

scipy sparse-matrix gradient-descent tensorflow

10
推荐指数
1
解决办法
6436
查看次数

csv到python中的稀疏矩阵

我有一个很大的csv文件,它列出了图中节点之间的连接.例:

0001,95784
0001,98743
0002,00082
0002,00091

所以这意味着节点id 0001连接到节点95784和98743,依此类推.我需要把它读成numpy中的稀疏矩阵.我怎样才能做到这一点?我是python的新手,所以这方面的教程也会有所帮助.

python sparse-matrix data-structures

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

对Ax = b并行化Solve()?

与STATS.se交叉,因为这个问题可以跨越两个STAT.se/SO https://stats.stackexchange.com/questions/17712/parallelize-solve-for-ax-b


我有一些非常大的稀疏矩阵,使用矩阵包中的spMatrix函数创建.

使用solve()函数适用于我的Ax = b问题,但需要很长时间.几天.

我注意到http://cran.r-project.org/web/packages/RScaLAPACK/RScaLAPACK.pdf 似乎有一个可以并行化解决方案功能的功能,但是,可能需要几周的时间来安装新的软件包特定服务器.

服务器已经安装了雪包.

所以

  1. 有没有办法使用雪来并行化此操作?
  2. 如果没有,还有其他方法可以加快这种类型的操作吗?
  3. 还有像RScaLAPACK这样的其他软件包吗?我对RScaLAPACK的搜索似乎表明人们对它有很多问题.

谢谢.

[编辑] - 其他细节

矩阵约为370,000 x 370,000.我用它来解决alpha中心问题,http://en.wikipedia.org/wiki/Alpha_centrality.我最初在igraph包中使用alpha中心函数,但它会崩溃R.

更多细节

  • 这是在一台机器上,有12个核心和96个内存(我相信)
  • 它是沿着引文关系线的有向图.
  • 计算条件数和密度需要一段时间.将发布,因为它可用.
  • 将对stat.SE进行crosspost并将链接添加回此处

parallel-processing r sparse-matrix

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

如何并行scipy稀疏矩阵乘法

我有一个scipy.sparse.csr_matrix格式的大型稀疏矩阵X,我想用一个利用并行性的numpy数组W来乘以它.经过一些研究后,我发现我需要在多处理中使用Array,以避免在进程之间复制X和W(例如:如何在Python多处理中将Pool.map与Array(共享内存)结合起来?并将共享的只读数据复制到Python多处理的不同过程?).这是我最近的尝试

import multiprocessing 
import numpy 
import scipy.sparse 
import time 

def initProcess(data, indices, indptr, shape, Warr, Wshp):
    global XData 
    global XIndices 
    global XIntptr 
    global Xshape 

    XData = data 
    XIndices = indices 
    XIntptr = indptr 
    Xshape = shape 

    global WArray
    global WShape 

    WArray = Warr     
    WShape = Wshp 

def dot2(args):
    rowInds, i = args     

    global XData 
    global XIndices
    global XIntptr 
    global Xshape 

    data = numpy.frombuffer(XData, dtype=numpy.float)
    indices = numpy.frombuffer(XIndices, dtype=numpy.int32)
    indptr = numpy.frombuffer(XIntptr, dtype=numpy.int32)
    Xr = scipy.sparse.csr_matrix((data, indices, …
Run Code Online (Sandbox Code Playgroud)

python parallel-processing scipy sparse-matrix

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

对于稀疏的scipy矩阵,将行设置为零的最有效方法是什么?

我正在尝试将以下MATLAB代码转换为Python,并且无法找到可在任何合理时间内工作的解决方案.

M = diag(sum(a)) - a;
where = vertcat(in, out);
M(where,:) = 0;
M(where,where) = 1;
Run Code Online (Sandbox Code Playgroud)

这里,a是稀疏矩阵,其中是矢量(如输入/输出).我使用Python的解决方案是:

M = scipy.sparse.diags([degs], [0]) - A
where = numpy.hstack((inVs, outVs)).astype(int)
M = scipy.sparse.lil_matrix(M)
M[where, :] = 0  # This is the slowest line
M[where, where] = 1
M = scipy.sparse.csc_matrix(M)
Run Code Online (Sandbox Code Playgroud)

但由于A是334863x334863,这需要三分钟.如果有人对如何加快速度有任何建议,请提供帮助!为了进行比较,MATLAB在不知不觉中快速完成了同样的步骤.

谢谢!

python matlab numpy scipy sparse-matrix

9
推荐指数
2
解决办法
2326
查看次数

将scipy稀疏矩阵存储为HDF5

我想以HDF5格式压缩和存储一个巨大的Scipy矩阵.我该怎么做呢?我试过以下代码:

a = csr_matrix((dat, (row, col)), shape=(947969, 36039))
f = h5py.File('foo.h5','w')    
dset = f.create_dataset("init", data=a, dtype = int, compression='gzip')
Run Code Online (Sandbox Code Playgroud)

我得到这样的错误,

TypeError: Scalar datasets don't support chunk/filter options
IOError: Can't prepare for writing data (No appropriate function for conversion path)
Run Code Online (Sandbox Code Playgroud)

我无法将其转换为numpy数组,因为会有内存溢出.什么是最好的方法?

python hdf5 scipy sparse-matrix h5py

9
推荐指数
2
解决办法
2768
查看次数